Бизнес-логика должна быть четко отделена от доступа к данным;Как вы правильно сказали, размещение общих объектов для передачи между всеми слоями в Доступе к данным - это плохо.
- Используйте ваши POCO для передачи данных между слоями, определите их в общей сборке, которая очень свободназависимости (поскольку все проекты, которым необходимо обмениваться данными, должны будут ссылаться на них.
- Разделить бизнес-логику и доступ к данным с помощью интерфейса, интерфейс определит методы, которые вызываются для передачи и вывода данных - иэти данные будут передаваться либо в виде базового базового типа (int, string, bool и т. д.), либо в виде POCO (определенного в вашей общей сборке).
- В рамках имплементации доступа к данным используйте все, что захотите -ваш случай EF. Это означает, что вам придется преобразовывать объекты EF в POCO, но это означает, что ваша архитектура чиста.
Но как бы я создал POCO (при генерации кода) каккак сущности?
Я работаю с точки зрения того, что бизнес-логика - это то, с чего вещи "концептуально" начинаются;сказать, что она воплощает модель предметной области, также было бы достаточно точно.
POCO - это то, как мы передаем информацию - и по большей части их дизайн будет зависеть от потребностей бизнес-логики (или модели предметной области).).В случае модели доменной модели / DDD, возможно, POCO могут быть частью этого домена (на данный момент я все еще не уверен, является ли это проблемой или нет).
Итак - как они генерируются(концептуально) в соответствии с потребностями бизнес-логики;однако, если производительность является ключевым аспектом ваших требований, у вас также могут быть некоторые проблемы, связанные с производительностью (например, получение большого количества данных в одном большом DTO, а не много дискретных вызовов).
Как они генерируются физически?Ну, я пишу их вручную или с помощью небольшого инструмента, который я взломал вместе.Я обычно использую Structs
(и Collections
) для моих POCO, но вместо этого вы можете использовать classes
.
Я не пытался автоматически генерировать из бизнес-логики или доменной модели дляпара причин:
- Это сложно.
- После того, как они сгенерированы, они не сильно меняются - и вы не захотите, если они используются всеми вашими сборками, вы быбыстро сломать всю систему.
- Я строю разные POCO по разным причинам, и это определенно человеческое суждение.