Здравствуйте, LaptevVV, Вы писали:
LVV>Когда я преподавал технологию программирования,
LVV>я с удивлением обнаружил, что нет четкого понятия "архитектура системы"
LVV>и тем более нет понятия "хорошая" и "плохая" архитектура.
...
LVV>Что уважаемый форум думает? Особенно о формальных критериях оценки "хорошести"
В моем понимании хорошей архитектуре присущи несколько качеств :
1) ПРОСТОТА ИСПОЛЬЗОВАНИЯ. Любая хорошо спроектированная архитектура должна "скрывать" от разработчиков, которые ее используют, детали реализации, предоставляя удобный для использования интерфейс. Здесь можно привести аналогию, например, с коробкой передач в автомобиле. Когда мы переключаем передачи, на самом деле внутри коробки перемещается уйма шестеренок, но все, что требуется от нас — выжать педаль сцепления и передвинуть рычаг из одной позиции в другую.
2) РАСШИРЯЕМОСТЬ. Должна быть возможность добавлять в архитектуру новые "фичи", не перетряхивая при этом весь уже имеюшийся код.По собственному опыту, для новой предметной области крайне редко удается создать такую архитектуру с "первого захода", обычно она "устаканивается" в течении нескольких итераций, пока не станет более-менее стабильной.
3) ПРОИЗВОДИТЕЛЬНОСТЬ. Любая архитектура, какой бы красивой и элегантной она не была, малополезна, если код с ее использованием сильно тормозит работу программы. За универсальность всегда приходится платить, но здесь важно найти некую золотую середину, чтобы все это работало достаточно быстро.
4) НАДЕЖНОСТЬ. Если при использовании архитектуры или фрамеворка у разработчиков нет достаточной уверенности, что код, реализующий архитектуру, стабильно работает, это ни к чему хорошему не приведет. Опять же по собственному опыту, одно из наиболее полезных средств здесь — unit-тесты. Можно спокойно менять дизайн для обеспечения пп 1)-3), не боясь, что что-то кардинально сломается — unit-тесты в любой момент покажут, все ли нормально. Естественно, чтобы это все работало, unit-тестами должно быть "прикрыто" подавляющее большинство критичных мест архитектуры. Насчет этого хорошо сказал один из разработчиков, по-моему, Рон Джефриз. Когда его спросили , для всего ли кода надо делать unit-тесты, он сказал : -Нет, только для того, что вы хотите чтобы работало.
5) (опционально) Хороший набор примеров по использованию этой архитектуры, чтобы новый архитекторв/программист смог быстро подключиться к разработке.
P.S.
Это все IMHO.