Я использовал Entity Framework 4.0 для создания уровня доступа к данным. Затем я обнаружил, что мой уровень бизнес-логики имеет те же объекты, что и DAL, но с некоторыми расширениями (например, больше свойств, некоторые функции и проверка данных в установщиках...).
Я планировал использовать DAL и BLL в отдельных проектах и искал передовой опыт использования классов сущностей в BLL и предотвращения избыточности кода.
Пока я искал, есть две основные идеи:
- расширение классов сущностей внутри одного проекта частичными классами
- Использование интерфейсов (реализованных классом сущности и соответствующим классом BLL). Первый более популярен среди программистов.
Недостатки вышеуказанных решений:
- Нам нужно добавить код в тот же проект как часть частичного класса. Это хорошо для добавления свойств и методов, но не подходит для переопределения чего-либо (т. е. добавления проверок перед установкой свойства на уровне бизнес-логики).
- Если модель сущности изменена, нам нужно снова вручную извлечь интерфейсы из классов сущностей, а также необходимо еще одно изменение в классе, связанном с BLL (два обходных пути вручную).
Мой вопрос: почему мы просто не наследуем наши классы BLL от соответствующих классов сущностей и не расширяем/не переопределяем их методы и свойства?