Интересно - я бы поставил абстракцию между BL и DAL, прежде чем я сделаю это для уровня представления.
Подход, использованный в вашем другом вопросе, кажется разумным - почему бы вам просто не использовать это снова?
- Да, вам нужна фабрика; но вы можете включить это в общий класс / сборку и заставить его просто возвратить
object
, который затем можно будет разыграть, когда он будет возвращен - т.е. в точке BL, где он вызывается.
- (для полноты :) использование
Activator.CreateInstance()
(как вы уже использовали в своем другом вопросе) - правильный путь.
- Для DAL я склонен использовать значения, хранящиеся в конфигурации (в качестве аргументов для передачи на фабрику); нередко часто меняют реализацию DAL - так что конфиг у меня хорошо работает.
- При проектировании подрядчика / абстракции между BL и DAL соблюдайте Принцип разделения интерфейса (ISP) - если вы все сделаете правильно, вы сможете смешивать и сопоставлять различные физические реализации DAL на один раз.
- Если вы храните DTO и фабрику в общей сборке (возможно, в той же самой), то их легко повторно использовать с BL и различными реализациями DAL - с предупреждением , что вы сохраняете это общее класс, лишенный зависимостей, как возможный. Если вы сделаете это, вы сможете добавлять / обновлять реализации DAL без повторной компиляции и повторного развертывания всей системы.