2012-12-10 34 views
1

所以,讓我們說我們必須設計一個圖書館管理系統。現在,這可以通過編寫無處不在的語言的域驅動設計原則來完成,然後找出有界的上下文,創建聚合根並最終具有書籍,用戶,作者等的對象模型。如何在設計通用系統時應用領域驅動設計原則?

但是,如果我們必須根據Salesforce或Sharepoint設計一個通用系統(具有設計和創建自定義表單和工作流程的功能)。所以,首先我們要創建一個通用的系統,它可以用來實現圖書館管理系統或任何其他系統,比如人力資源管理系統等等。

我們是否仍然可以在設計通用系統時應用領域驅動設計原則?如果,是的,那麼在無處不在的語言中,我們應該列出書籍,用戶,作者,僱員,部門等域對象,還是應該列出通用對象/名稱值對/哈希表。因爲,這個通用系統可以用來實現任何其他領域特定的系統。

換句話說,如何將域驅動設計原則應用於創建通用系統?以後可以用它來實現其他領域特定的系統。

回答

2

我們是否仍然可以將域驅動設計原則應用於設計 通用系統?

是的,DDD可以應用於您描述的通用系統。

如果是,那麼在無處不在的語言,我們應該列出域對象 如書籍,用戶,作者,僱員,部門等還是應該 只列出通用對象/名稱值對/哈希表。

的名字,如對象哈希表不僅是通用的,但也有非常強的技術內涵。無處不在的語言將由開發人員和領域專家共享,因此應儘可能少地涉及技術問題。這並不是說技術名稱如對象是錯誤的名稱 - 只需注意您的域和支持的技術基礎結構之間的區別。即使所有領域專家都是開發人員,但區分這一點非常重要。

可以說,DDD由兩部分組成 - 戰術和策略。戰術模式具有技術性質,包括諸如存儲庫,價值對象等。這些模式通常對每種語言和平臺都有特定的表現形式。隨着技術的變化,這些模式也很可能會發生變化。例如,如果在DDD中使用event-sourcing,戰術模式有所不同。在實現一個通用系統時,如你所描述的那種戰術模式可能會再次不同。

戰略模式在更高的抽象層次上運行,幷包含有限上下文,上下文映射,無處不在的語言,模型/設計漩渦等。這些模式不受技術約束的束縛,並且適用於戰術模式之外。從某種意義上講,它們也比戰術模式更重要,並且無論基礎技術如何,它們都適用,因爲它們更適合人們思考的方式而不是計算機的方式。因此,您仍然可以從通用領域獲得戰略模式的好處。

+0

但問題是,如果你正在設計一個通用系統,你會把無處不在的語言放在什麼位置。您的定位沒有域名。 – Mohit

+1

總有一個領域,在這種情況下,它恰好是一個通用/抽象/技術領域。您可以將無處不在的語言中可能通用的術語,但不必具有技術含義,例如哈希表這樣的術語。 – eulerfx

+0

所以你的意思是你可以使用像PrimaryEntity,ChildEntity或GenericResource或類似的東西來表示一個通用的實體。但是,不應該使用Hashtable或Arraylist,因爲這些都是技術特定的。 – Mohit