2012-01-10 138 views
0

1)什麼是BLL-services?他們和Service Layer服務有什麼區別?什麼去域服務和什麼去服務層?域驅動設計令人困惑

2)我如何重構BBL模型來給它一個行爲:Post實體擁有一組反饋,已經可以添加另一個Feedbackfeedbacks.Add(feedback)。顯然,在一個普通的博客應用程序中沒有計算。我應該定義一種在Post實體內添加Feedback的方法嗎?或者應該通過相應的服務來維護這種行爲?

3)我是否應該使用Unit-Of-Work(和UnitOfWork-Repositories)模式,如http://www.amazon.com/Professional-ASP-NET-Design-Patterns-Millett/dp/0470292784中所述,或者使用NHibernate ISession就足夠了?

回答

3

1)Business LayerService Layer實際上是同義詞。 「官方」DDD術語是Application Layer

Application Layer的作用是在Domain ServicesDomain Model之間協調工作。這可能意味着,例如,應用程序函數首先通過Repository加載實體,然後調用將執行實際工作的實體的方法。

2)有時候當你的應用程序大部分是數據驅動的時候,構建一個全功能的Domain Model看起來似乎有點矯枉過正。但是,在我看來,當你習慣了Domain Model這是你想要的唯一方法。

PostFeedback情況下,你想從一開始的AddFeedback(Feedback)方法,因爲它會導致較低的偶合(你不必知道,如果FeedBack項目被存儲在一個List或在Hashtable爲例)和它會爲您提供一個很好的擴展點。如果您想要添加一張支票,那麼不會再有10 Feedback項目被允許。如果您有AddFeedback方法,您可以輕鬆地將檢查添加到單個點中。

3)UnitOfWorkRepository模式是DDD的基本部分。我不是NHibernate專家,但隱藏基礎設施特定細節總是一個好主意。這將減少耦合並提高可測性。

3

我建議你先閱讀DDD書或its short version以獲得對DDD構建模塊的基本理解。沒有BLL服務或服務層服務這樣的事情。在DDD你有

  • 領域層
  • 應用層(軟件其中域對象駐留的心臟)(編排您的應用程序)
  • 基礎設施層(持久性,消息發送...)
  • 表示層。

在所有這些層中都可以有服務。服務就在那裏爲許多其他對象提供行爲,它沒有狀態。例如,一個域圖層服務就是您將內聚的業務行爲放在哪裏,這些行爲不屬於任何特定的域實體和/或許多其他對象所要求的行爲。它提供的操作的輸入和輸出通常是域對象。

無論如何,每當操作似乎完美地裝配到從一個域透視的實體(如添加到反饋後,轉化爲Post.AddFeedback()Post.Feedbacks.Add()) ,我總是爲此而努力,而不是增加一項服務,這種服務只會分散不同地方的行爲,並逐漸導致貧血域模型。可能會有例外,比如向帖子添加反饋時需要在許多不同的對象之間建立連接,但這顯然不是這種情況。