Я работаю над бизнес-приложением, которое разрабатывается с использованием философии DDD. Доступ к базе данных осуществляется через NHibernate, а уровень данных реализуется с использованием шаблона DAO.Доступ к нескольким поставщикам данных в слое данных
Диаграмма классов UML показана ниже.
UML Class Diagram http://img266.imageshack.us/my.php?image=classdiagramhk0.png http://img266.imageshack.us/my.php?image=classdiagramhk0.png
Я не знаю, дизайн хорош или нет. Как вы думаете?
Но проблема в том, что дизайн не хорош или нет. Проблема заключается в том, после запуска приложения IDaoFactory
инстанциируются в слое представления и отправить в качестве параметра к классам презентаторов (который разработан с использованием MVC шаблона), как показано ниже
...
IDaoFactory daoFactory = new NHibernateDaoFactory(); //instantiation in main class
...
SamplePresenterClass s = new SamplePresenterClass(daoFactory);
...
Использования только одного поставщика данных (который был только одна базы данных) было просто. Но теперь мы также должны получить данные из XML. И на следующих этапах разработки мы должны подключиться к различным веб-сервисам и управлять входящими и исходящими данными.
Данные из XML будут получены с использованием ключа, который является перечислением. Мы добавляем класс с именем XMLLoader
к слою данных и добавляем к домену интерфейс ILoader
. XMLLoader
имеет метод, чью подпись
List<string> LoadData(LoaderEnum key)
Если мы создаем ILoader с XMLLoader в презентации слое, как показано ниже, мы должны отправить его на объекты, которые собираются получить некоторые XML-данные из уровня данных.
ILoader loader = new XMLLoader();
SamplePresenterClass s = new SamplePresenterClass(daoFactory, xmlLoader);
После реализации классов доступа к веб-службы
SamplePresenterClass s = new SamplePresenterClass(daoFactory, xmlLoader, sampleWebServiceConnector1, sampleWebServiceConnector2, ...);
Параметры будет выращиваться во времени. Я думаю, что могу хранить все экземпляры объектов доступа к данным в классе и передавать их требуемым презентаторам (может быть, и синглетный шаблон может помочь). В области слоя должна быть класс, как это,
public class DataAccessHolder
{
private IDaoFactory daoFactory;
private ILoader loader;
...
public IDaoFactory DaoFactory
{
get { return daoFactory; }
set { daoFactory = value; }
}
...
}
В главном классе конкретизация может быть сделана с этой конструкцией следующего
DataAccessHolder dataAccessHolder = new DataAccessHolder();
dataAccessHolder.DaoFactory = new NHibernateDaoFactory();
dataAccessHolder.Loader = new XMLLoader();
...
SamplePresenterClass s = new SamplePresenterClass(dataAccessHolder);
Что вы думаете об этом проекте или вы можете предложить мне другой?
Спасибо всем repliers ...
Ваш образ мертв. – Nix