2009-12-01 170 views
1

在通過網絡閱讀大量關於最佳實踐應用程序設計和模式的文章後,我仍然無法將所有信息合併在一起,並映射到我的真實應用程序...3層web服務架構

我想有一個3層的應用程序:

  • UI層:
    的ASP.net中承載的Silverlight的應用程序 - 的webapp

  • 商海ssLogicLayer:
    的WCF服務/ .NET RIA-服務不同的服務器

  • DataAccessLayer上運行:使用ORM像NHibernate的奧德Linq2Entities


的問題是,我不知道知道在哪裏放置我的業務對象,以及在哪裏填充數據。

是否應該有另一個圖層,包含我所有的業務對象,以便它們可以用於所有其他3個圖層?
或者我應該把它們放到我的BLL中,然後在DAL中調用nHibernate-Methods - 但是我會在BLL和DAL之間產生循環依賴關係? 如果我在DAL中引入「DataAccessObjects」並將所有屬性複製到BLL中的BusinessObjects中,是不是「過度構建」?

任何幫助表示讚賞!

最好的問候, 丹尼爾·蘭

回答

0

業務對象在業務層中去。這些對象由UI層使用,並調用Data層的方法來填充它們自己。

通常,圖層中的對象只能調用其自己圖層或下面的圖層中的方法。

其中一個動機是能夠替換其中一個圖層而不更改其他圖層。例如,可能有不同的方式來呈現UI,其可以使用來自業務層的相同方法。或者,也許可以改變數據庫,只要新數據層包含與舊數據層相同的方法即可。

0

那麼,因爲你使用WCF,你應該有一個只包含接口和數據類的「契約」。這些類應該對其他人可用。它裏面不應該包含任何邏輯。

+0

Infact,我不直接使用WCF,而是建立在「普通」WCF服務之上的WCF RIA服務。 我的意圖是,儘可能保持業務對象的清潔,從而創建額外的「經理」類,它們用業務對象完成所有工作。 – 2009-12-02 16:28:43

0

那麼,在回顧整個問題之後,我認爲最好的解決方案是使用DependencyInjection或IversionOfControl來用DAL中的數據填充業務對象。

0

業務對象在公共層中去,

我通常創建一個項目,它們包含,業務對象,枚舉和什麼是服務器和客戶端之間的共同。

該項目被所有圖層引用。它不能引用任何其他項目,否則這將創建一個循環引用。