2012-10-21 55 views
1

當我寫一個網上商店時,當我對該領域進行建模時,我想到了一個問題,即如何對不同粒度的不同系統更改的對象建模。來自Webservice的DDD模型更新

例如,讓我們說我們有一些屬性的產品實體:

  • Produtnumber
  • 名稱
  • 說明
  • 價格

我們收到的新產品和產品更新從兩個系統:集成在電子商務產品中的庫存管理系統(通過webservice)和管理web ui。

從庫存管理我總是獲得具有所有屬性(即使不是全部改變)的產品的完整更新。管理層用戶更新單一屬性(crud)。

那麼我應該如何模擬(和命名)產品實體上的商業案例相關變更方法?

事端像updateFromIms(價格,描述,名稱...)或者我應該寫每一個屬性的setter方法(它打破了「不可修改的」實體)

回答

0

有疑問時,我通常怎麼看待樣品運輸DDD應用程序做它。在C#中的示例應用程序了,可以發現:http://code.google.com/p/ndddsample/

所以你的情況,這類似於貨物實體如何治療,它有一個構造函數創建實體,然後它有公共方法,如SpecifyNewRoute即由BookingService用於ChangeDestination或BookNewCargo。從這樣的事情作爲用戶界面和遠程擔憂 - 模型,服務庫 -

這門面屏蔽域層:BookingService由BookingFacade有責任使用。

所以在你的情況下,你的UI和WebService可以調用一個叫做UpdateProduct的單一門面方法(我認爲從服務或UI更新的概念不同,所以你不需要單獨的方法像ChangeDestination,但它是你的調用)。門面方法將調用你的ProductService ::的UpdateProduct方法,該方法將調用產品型號:: UpdateProduct中

現在,我不知道你的應用程序的範圍,所以這可能是太多,但DDD是不是無論如何對於小應用程序。就我個人而言,我將埃裏克埃文斯的書和NDD樣本作爲指導,但我沒有看到擺脫一些複雜性的問題(例如忽略門面),沒有人比您更瞭解您的應用程序。

+0

謝謝。不知道你提到的項目。我會仔細看看它。但據我所知,更新任何方法是完全可以的,如果它是一個用例? – user948392

+0

如果它們在概念上相似,那也沒關係。在我看來,它不會增加你的模型的豐富程度,有兩種獨立的方法。 – kabaros

+0

好的,謝謝。這幫助了我很多 – user948392