2013-09-25 3 views
2

Я новичок в платформе Entity Framework (сначала код, если это имеет значение). Поскольку я использовал его, я строил классы POCO, думая о них как о моделях окончательного домена. С такими вещами, как Lazy Loading, мне нравится идея, что я могу использовать эти сущности непосредственно на моем уровне представления, получая ленивую загрузку того, что мне действительно нужно.Должен ли я думать о Entities в EF как о доменных моделях или DTO?

Однако я также недавно узнал о объектах передачи данных, о чем я раньше не слышал. Это абсолютно разумно; поведение моей конечной модели домена может иметь некоторые бизнес-правила, которые не относятся к DAL. Например, если POCO SalesOrder, который я даю Entity Framework, включает в себя его окончательные методы, такие как AddItem(Product), который генерирует исключение, если Product имеет DiscontinuedDate, который находится перед SalesOrder.OrderDate. Это определенно звучит как материал, который принадлежит BLL.

Таким образом, я полагаю, это означает, что классы POCO, которые я даю Entity Framework должен быть больше как DTO-х ?, как SalesOrderDto и EmployeeDto только простых маленьких держатели данных с только свойствами и без каких-либо методов, которые затем получить отображенные (возможно, с использованием AutoMapper) для объектов домена в моем BLL, которые затем передаются на уровень презентации?

Я на правильном пути здесь, или я что-то упускаю. Я чувствую смущение, потому что идея DTO имеет прекрасный смысл, но я никогда не видел, чтобы они использовались в контексте Entity Framework.

+0

У меня была аналогичная проблема, и я получил пару ответов, которые могут вам пригодиться: http://stackoverflow.com/questions/11521192/placement-of-dto-poco-in-a-three- ярус-проект – GrandMasterFlush

ответ

0

Entity Framework - это объект релятографического картографа. Следовательно, сущности являются отображениями ваших реляционных таблиц.

Они

простые маленькие держатели данных с только свойствами и не методы

да.

1

Это зависит от вас. Отображаются только свойства, поэтому вы можете свободно добавлять методы (и с базой данных Первые частичные классы генерируются, поэтому вы можете сделать то же самое).

Обычно бизнес-объекты необязательно непосредственно отображаются на объекты хранения. В этом случае ваш бизнес-объект может существовать из одного или нескольких объектов хранилища, независимо от того, будет ли он (автоматически) сопоставлять их с первым DTO, также зависит от вас.

Обратите внимание, однако, что бизнес-логика не должна находиться в объектах в любом случае. Хотя может возникнуть соблазн просто вставить свойство Customer.FullName (которое возвращает Customer.FirstName + " " + Customer.LastName), вам понадобится такая логика (как метод RegisterCustomer()) в соответствующем классе.

1

В некоторых простых случаях сущности могут быть DTO, просматривать модели и модели домена (в очень простых случаях - в то же время).

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

 Смежные вопросы

  • Нет связанных вопросов^_^