Nakedobjects
Давно собирался внимательно посмотреть на Голые объекты и хотел на их основе (+ AOP + BRMS) сделать демо-приложение предметной области описанной в документе определения бизнес-правил. И вот нашел немного времени ...
В чем тут фикус? Современные приложения, как правило, строятся на основе трехуровневой архитектуры (упрощенно интерфейс пользователя - предметная область - слой хранение). По отдельности каждый слой довольно прост и "потенциально" позволяет внесение изменений без необходимости трогать код других уровней. Потенциально, потому что это скорее красивая сказка, чем суровая действительность. Правильное соединение слоев в одном приложении и несет всю основную нагрузку.
Также нужно обратить внимание, что большое количество труда приходится именно на перемещение объектов между слоями. Есть объект - его нужно хранить в БД, загружать в модель домена и отображать для работы пользователя в UI. Все это конечно слишком общие слова, но если посмотреть внимательно на приложения ориентированные на данные - именно так и есть. Даже если внутри не объекты а наборы данных, которые отображаются стандартными сетками... Как-то я пытался построить наконец универсальный контур для построения приложений ориентированных на данные, да как обычно переключился на другие, более интересные дела. В общем идея голых объектов во многом похожа на то прошлое начинание, только вертится она вокруг объектов а не вокруг наборов данных.
Практически в любом приложении центральная часть - это предметная область, или домен. Есть технологии, которые облегчают отражение модели предметной области на остальные части приложения. Например ORM решает проблему прозрачного хранения объектов предметной области в долговременной памяти. (Можно долго говорить о достоинствах и недостатках ORM, но это уже объективная реальность. Инвестиции в моделирование, JDBC и/или ORM) Naked objects применяют тот же подход и к слою интерфейса. При этом используется расширенный набор аннотаций ...
Приложения Naked Objects состоят из двух основных компонентов - объектов предметной области и сервисов. Каждый объект представленный в интерфейсе пользователя должен иметь соответствующий класс java. Не зависимо от типа репозиториев (RDBMS, Hibernate, XML Store) CRUD операции библиотека реализует сама. Другие взаимодействия реализуются сервисами (просто классы с операциями). В общем кого заинтересовало - читайте руководство и смотрите примеры ... В поставке инструмента идут два примера - desktop и web, правда в последней 3.0.2 версии desktop глючит отображение списков.
PS
Создать свое приложение крайне просто. Прошел первую часть руководства и сделал тестовый проект Customer desktop и web, пока без аннотаций. Вообще аннотации не очень радуют, но по другому как придать дополнительную смысловую нагрузку - появляется слой :) Да еще конфигурационные файлы тоже присутствуют. В следующий присест займусь предметной областью аренды ...
О "дикости" интерфейса ... наверное просто нужно привыкнуть. Первое время за 1С тоже парился привыкал к большому количеству - сейчас вроде смирился.