我正在開發使用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