0

Мне интересно, как сделать слой dal с EF. Почему бы не вызвать EF непосредственно на бизнес-уровне, учитывая, что EF DBContext является unitOfWork и List DBSet являются хранилищами? Итак, почему добавление дополнительного слоя DAL, который, наконец, является фасадом. Единственное преимущество, которое я вижу, заключается в том, что нам нужно изменить реализацию доступа к данным, например заменить EF на Hibernate или другое. Но, честно говоря, я никогда не видел, чтобы это произошло.Утилита DAL-слоя с сущностью Framework 6

+0

«вызов EF непосредственно в бизнес-слое» - где именно? В самом бизнес-объекте? Как часть сценария службы/транзакции, использующего бизнес-прецедент? В отдельном объекте, подобном репозиторию, находящемся в бизнес-слое? – guillaume31

+0

@ guillaume31, а не сам объект businness, но из услуг. Например: общественного OrderService (IOrderRepository репо) { \t this.repo = репо } общественного недействительными Сохранить (OrderDTO заказ) { \t вар OrderEntity = ConvertDTOToEntity (заказ); \t, если (OrderEntity.CheckBusinessRules()) \t \t repo.Save (OrderEntity) } – BobyOneKenobi

+0

http://programmers.stackexchange.com/questions/235094/ensure-that-each-class-has-only-one- Ответственность - почему – guillaume31

ответ

2

На самом деле с помощью dataartper необходимость разработки DAL является бесполезной, поскольку она содержит 0 строк кода.

Все на вершине картографа данных не уровень доступа данные но фактический домен, потому что реализация данных картографа как OR/M переводит свои объекты в нижележащие реляционные данные и наоборот, и вы работаете на вершине из них состоит в том, чтобы развить свой домен и пропустить боль объектно-реляционного импеданса.

Точка введения шаблона хранилища на вершине картографа данных, потому что вы хотите и быть в состоянии переключить основное хранилище данных даже в нереляционные один в долгосрочной перспективе (также, переход от NoSQL для SQL, кто знает!), и есть еще одна принципиальная причина, чтобы ввести уровень репозитория в вашем программном обеспечении: , потому что вы хотите быть в состоянии издеваться над хранилищем данных с подделками, чтобы выполнить тестирование вашего домена.

Наконец, даже если Entity Framework реализует единицу работы и другие шаблоны, иногда их реализация может не соответствовать вашим собственным требованиям к домену, и вам необходимо их обернуть, чтобы обеспечить дополнительную конкрецию вашего домена.

+0

Согласитесь с макетом, но я думаю, что переключение базовых данных остается необычным и не оправдывает расходов 20% дополнительного времени – BobyOneKenobi

+0

@BobyOneKenobi Дополнительное время сегодня, меньше времени завтра;) –

+0

@bobyonekenobi Кстати, если вы знаете, как писать свои код DDD, вам не нужно дополнительное время. Если вы впервые используете DDD, возможно, что потеря времени происходит потому, что есть кривая обучения .... –