我會說你們都錯過了船,並在同一時間在正確的軌道....讓我解釋一下。
DDD是我們作爲一個行業將商業問題的現實編碼到我們可以映射到計算機程序的解決方案領域的最佳方式。 DDD是一種將真實領域抽象爲對我們來說更易於管理和相關的方法,這些都是好事。
您所面臨的問題是在實現中,過去20 - 30年的主流實現選擇是面向對象(OO),在OO中傳遞對象的核心機制是將對象的引用傳遞給與您自己一樣的內存空間。所以你面臨的問題是大對象圖從來沒有真正的問題。
輸入服務方向(SO),可以翻轉事物,不再傳遞對象的引用,而是在服務之間交換消息。消息的大小現在成爲一個問題。
如果我們接受實施模式已經改變,我們需要接受我們的一些OO最佳實踐/模式不再適用或需要修訂。
如果你想進入SO的思維方式,你需要,我相信(我的意見),稍微放開一個豐富的域名的想法。我將這個新概念稱爲面向服務的域(SO-Domain)。
在SO域中,域的狀態和域的行爲在您傳遞的消息和您使用的服務之間被分開。
因此,教師的狀態或屬性是TeacherDTO的一部分,但行爲是教師服務的一部分。
從OO的角度來看,這是一個貧血的領域,但在SO的意義上,它並不是什麼壞事,因爲這給了你一些驚人的靈活性,因爲你不再有一件大事,這個狀態可以用在多種環境中。
您仍然有一個有效的域,它只是分區分區,消息保持狀態和服務保持行爲。
其餘的歸結爲服務界面設計,所以要爲班主任你可以有像List RetrieveTeacherClasses(teacherIdentifier)的東西。添加學生AddStudentToClass(Student,classId)。
有一百萬種不同的方式來做到這一點,你會發現一個適合你的方法,但作爲一般規則,你應該遵循一個狀態感知的範例,這意味着消息將發送任何狀態服務需要意識到這一點,這使服務成爲無狀態,而無狀態服務意味着可擴展性。 Pratik提到性能,系統範圍內真正的性能收益並不是通過對對象圖的大小進行大驚小怪,而是由於解決方案中的每個服務獨立擴展的能力。
這裏有一些鏈接到更多關於這些想法
Building a SOA
SOA Design Pattern
Achieving integrity in a SOA
Why your SOA should be like a VW Beetle
SOA explained for your boss
WCF Service Performance
並沒有真正解決關於DDD和SOA是否相互正交的問題。 – 2010-12-16 01:07:57