我正在开发一个使用 DDD 理念开发的业务应用程序。数据库通过 NHibernate 访问,数据层使用 DAO 模式实现。
UML 类图如下所示。
UML 类图 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);
你觉得这个设计怎么样,或者你能给我推荐一个不同的设计吗?
感谢所有回复...