Ответ 1
Как правило, подход "наилучшей практики" будет примерно таким:
-
в вашем слое данных у вас есть объекты EF, которые загружаются и сохраняются в базе данных
-
в вашем бизнес-слое, у вас есть свои собственные объекты домена (простые классы С#), которые представляют данные, над которыми должно работать ваше приложение. Они могут быть более или менее идентичными объекту уровня данных или могут содержать несколько "атомных" объектов для создания бизнес-объекта или они могут быть значительно разными. Чтобы облегчить потребность в множестве операторов правого присваивания слева (для перемещения значений свойств взад и вперед между объектами уровня данных и объектами бизнес-уровня), вы должны проверить инструменты, такие как AutoMapper, что позволяет легко настроить "сопоставления" между похожими типами объектов и позволить вам легко назначать эти типы назад и вперед.
-
ваш слой пользовательского интерфейса будет визуализировать и представлять объекты бизнес-уровня для пользователя для информации и/или манипуляции
Преимущество заключается в том, что ваша модель домена бизнес-уровня представляет собой фактические бизнес-объекты, с которыми вы работаете, и становится более или менее независимой от того, как они действительно хранятся в слое данных. Кроме того, это позволяет избежать "склеивания" вашего уровня пользовательского интерфейса с конкретной технологией доступа к данным.
Конечно, это рекомендуемая передовая практика для приложения масштаба предприятия, где вам может понадобиться изменить уровень доступа к данным и т.д. Для более простого приложения вы можете пропустить эти действия, узнать, что вы делаете, и что вы "запираете" себя в EF, если вы используете объекты EF на всем протяжении бизнес-уровня в пользовательском интерфейсе. Если это нормально с вами и вашим сценарием приложения - нет особых причин не делать этого. Объекты EF являются вполне допустимыми классами объектов .NET - они просто происходят из общего базового класса (EntityObject
вместо object
), и у них есть определенное количество "багажа", которое приходит. Но ничто не мешает вам использовать эти объекты EF во всем приложении.