Типичная многослойная архитектура делится на уровни «представления», «предметной области» и «долгосрочного хранения данных». На практике основной код размещается на уровне представления, уровень предметной области превращается в набор анемичных контейнеров данных, а уровень долгосрочного хранения вырождается в вызовы функций инфраструктуры.
В то же время часть важной информации дублируется между уровнями. Например, максимальная длина фамилии представляется в виде ширины поля базы данных (возможно – в виде правила проверки данных в предметной области) и как параметр свойства JTextField в пользовательском интерфейсе.
В то же время в представление должна внедряться логика типа «если этот флажок установлен, снять блокировку с этих четырех текстовых полей». На первый взгляд кажется, что это утверждение относится к пользовательскому интерфейсу, но в действительности в нем отражена часть бизнес-логики: если посетитель является членом Портретного клуба, то приложение должно сохранить его личный номер и срок пребывания в клубе.
Таким образом, в типичной трехуровневой архитектуре часть информации распространяется между уровнями, а другая важная информация прячется в логике управления GUI.
В конечном итоге мы решили эту проблему инвертированием обычных отношений GUI с уровнем предметной области. Мы возложили на предметную область ответственность за разделение экранного представления и логических манипуляций со значениями и свойствами.
Related posts:
- Пользовательский интерфейс
- Один факт в одном месте
- Общая модель программирования Darkstar
- Интерфейс модуля
- Минимум потери данных