На самом деле я бы выбрал следующий подход:
Имейте модели (POCO), например, в проекте, на который ссылаются только ваши DAL и BLL. Это позволит вам работать с ними на уровне DAL и применять к ним бизнес-логику в BLL.
Для уровня представления я бы создал DTO (объекты передачи данных), которые будут переносить только те данные, которые вам нужны для определенного сценария / объекта. Перевод между DTO и POCO я бы поместил в BLL.
Я могу подумать о следующих плюсах и минусах этого подхода:
1) Плюсы
- Полное разделение между уровнями представления и ядра (BLL, DAL). Ваши DTO будут независимы от базы данных (POCO), что означает, что независимо от того, какие изменения вы вносите в базу данных, вам нужно будет изменить это только на уровне переводов.
- стабильный BLL API
- Разделение проверки - вы можете выполнить проверку на DTO для презентации и на POCO для BLL.
2) Минусы
- Правила перевода для каждого POCO-to-DTO. Это неизбежно усложнит ваш код, но я считаю, что это хорошая отдача.
- Производительность накладных расходов. Перевод и создание экземпляров DTO и POCO добавят некоторые накладные расходы к вашему приложению. В зависимости от ваших требований и возможностей машины вы можете решить, является ли это хорошей окупаемостью.
Я также советую вам взглянуть на некоторые библиотеки отображений, которые позволяют легко отображать / переводить между различными типами объектов. На мой взгляд, лучшим является ThisMember как по простоте, так и по производительности.
Привет