0

Итак, я читаю эту книгу DDD и в то же время разрабатываю новую систему. В книге DDD у них есть пример, где у объекта есть частные члены, такие как идентификатор и другие значения.Как создать код EF5 для первых объектов с защищенными/частными членами. Стиль DDD

Позволяет сказать, что у нас есть пользовательский объект, и у него есть идентификатор и набор курсов, на которые он имеет право присутствовать.

Тогда в стиле DDD они используют что-то вроде GrantRightTo (курс c), если мы говорим об объекте пользователя. И все это хорошо и хорошо, потому что в функции теперь я могу проверить любые бизнес-правила, например, если пользователь зарегистрирован на слишком много курсов. Умная!

Альтернативой является то, что у кого-либо есть разрешение на сбор курсов, но затем контроллеры должны знать бизнес-правила, что не очень хорошо.

Теперь вот проблема с кодом EF, я не могу получить свою коллекцию курсов, чтобы быть конфиденциальной/защищенной, как моя книга делает это и все еще сохраняется (dbcontext) Итак, что делать?

Я мог бы, конечно, открыть коллекцию и по-прежнему иметь такой метод, как GrantRightTo, но тогда другие разработчики могут сделать это неправильно, поэтому не идеальны.

Что делать?

ответ

2

Лучший способ сделать это - сопоставить модель вашей базы данных с объектом передачи данных DTO.

Вы создали бы дополнительный слой с DTO-моделью. В этом случае модель реального домена может быть основана на этой модели БД. В вашей модели домена вы можете абстрагироваться от различий в базовой модели.

Это также имеет недостаток в том, что вам нужно будет поддерживать обе модели, если есть вертикальные изменения в ваших проектах. Тем не менее, он также позволяет вашей модели домена независимо изменять вашу физическую модель базы данных.

+0

Благодарим вас за ответ. Это звучит немного раздражающе, чтобы добавить еще один слой, который нужно поддерживать. Это рекомендуемый путь, или я должен просто взглянуть на другой дизайн? –

+0

Это зависит от вашего приложения. Это один из способов, но, как я уже сказал, есть преимущества и недостатки. Вы должны действительно посмотреть на свое конкретное приложение и посмотреть, что лучше для вашей ситуации. К сожалению, здесь нет серебряной пули – Kenneth

+0

Как насчет этого решения: http://blog.oneunicorn.com/2012/03/26/code-first-data-annotations-on-non-public-properties/ Правда есть какой-то код в объекте, который хранит его, но он все еще теоретически сохраняет агностик. и устранит необходимость в дополнительном слое. –