我正在开发使用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获取数据。在开发的下一阶段,我们应该连接到不同的Web服务并操纵传入和传出的数据。
来自XML的数据将使用一个枚举键来获得。我们将一个名为XMLLoader
的类添加到数据层,并将一个接口ILoader
添加到域中。 XMLLoader
有其签名是
List<string> LoadData(LoaderEnum key)
如果我们在表示层与XMLLoader实例ILoader下面我们将其发送到将要得到的数据层的一些XML数据对象的方法。
ILoader loader = new XMLLoader();
SamplePresenterClass s = new SamplePresenterClass(daoFactory, xmlLoader);
实现Web服务访问类
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 2013-01-11 18:30:35