http://i.stack.imgur.com/YZXZN.png (я в настоящее время не разрешено вставлять изображения)
Мне действительно может понадобиться помощь с моей моделью класса выше. Мне стыдно признаться, что я был одним из «тех» разработчиков, которые изучили объектную ориентацию в университете, написали экзамены, сдали их, но потом так и не приступили к реализации принципов в моем реальном коде. Я никогда по-настоящему не садился и не обдумывал дизайн своего приложения, прежде чем приступить к его кодификации. Таким образом, мои навыки дизайна и кодирования медленно умирали и стагнировали под тяжестью разработки и обслуживания монолитных устаревших банковских приложений. После многих лет этого я решил, что это определенно время для изменений! Я глубоко погружался в мир шаблонов проектирования, DDD, NoSQL, DI и т. д. Последние 2 недели были для меня действительно напряженным опытом, и иногда мне кажется, что я чуть не расплакался от одного только объема. лучших практик и технологий, которые я пропустил, работая в крупных корпорациях и банках. Я просто не мог поверить, насколько я был далек от передовых технологий и хороших подходов к дизайну так долго, и внезапная полоса всего угрожала отправить меня в состояние паралича программирования! Я просто не мог начать программировать, так как чувствовал, что мой дизайн нуждается в дополнительной настройке или мне нужно больше изучать определенную тему. Однако этого достаточно, и мне нужно взяться за дело и хотя бы сделать первую итерацию проекта.
В любом случае, хватит драмы, по моему вопросу:
Я начал работу над созданием модели для моего приложения для игры в гольф. Желая немного придерживаться DDD, а также желая использовать NoSQL (RavenDB), я приступил к следующим требованиям.
- Мой стек платформы — Windows/IIS/MVC 3.0/RavenDB.
- Мне нужно найти мои совокупные корни! Я приступил к определению их как единственных элементов моей системы, способных сохраняться сами по себе. Все остальное я просто считал "подкомпонентом" агрегатов. Обратите внимание, что реальное поведение еще не определено.
- Мои совокупные корни будут единственными классами, которые действительно сохранятся в моем хранилище документов RavenDB, и они будут сохраняться «как есть». Наличие больших древовидных структур классов, по-видимому, было бы лучшим сценарием для RavenDB с точки зрения реализованных преимуществ в производительности.
- Я не чувствую необходимости в слое репозитория (следил за некоторыми сообщениями Айенде), поскольку API RavenDB кажется плавным и довольно легким. Я буду просто открывать и закрывать свои сеансы с помощью настраиваемых атрибутов действий на своих контроллерах, где это необходимо. Я видел, что без уровня репозитория тестирование может быть сложным, но, конечно же, я должен иметь возможность просто издеваться над некоторыми объектами домена «в памяти»?
- Запись в БД будет происходить на отдельном сервисном уровне.
- В какой-то момент я остановился и спросил себя: «Куда, черт возьми, я собираюсь поместить свое доменное поведение!?». Общий консенсус в результате поиска в Интернете, по-видимому, указывает на то, что я должен оставить свой домен (сущности) без какого-либо поведения (бизнес-логики) и все это обработать на моем сервисном уровне. Но после прочтения Эрика Эванса я убедился, что большая часть моего поведения в домене должна существовать прямо здесь... в домене!
Вопросы. Как добросовестный новичок в области DDD и архитектурного дизайна, я, по крайней мере, на правильном пути, или мне суждено погибнуть? - Будем очень признательны за любые мысли, предостережения, конструктивную критику и понимание вышеизложенного!