2010-03-22 94 views
10

是否有人使用域驅動設計技術?我最近閱讀了埃裏克埃文斯同名書(其中大部分是!),並且有興趣聽到任何人在項目中實現了全部/部分內容(特別是在C#/ C++中)實施域驅動設計

我已經把這個問題開放式的,我想看到的許多意見越好,但我有特別的幾個問題:

1 - 如果值類型是真正的「價值型」如果語言支持的話?例如在C#

2-一個結構是否有在C#,使更清晰的語言和該模型之間的關聯的任何特徵(例如,這是一個實體,這是一個聚集體等)

回答

6

是的!我在我的項目中使用DDD(但是I'm biased!)

請記住,域驅動設計提供準則,而不是嚴格的答案。只有在試驗之後,您纔會明白哪些方面適用於您的特定項目。

到你的問題:

1 - 你可以使用結構 - 但有可能是技術的限制阻止你使用它們。例如,您可能有引用數千個值對象的實體碰巧具有相同的值。在這種情況下,它可能是更好地使用輕量級對象保持內存使用下來。

2 - 我建議使用接口(例如IEntityIValueObjectIAggregateRootISpecification)。泛型和LINQ可以幫助解決技術問題,但從設計的角度來看並不會有幫助。

我已經創建了一個專門關注DDD的[免費.NET庫] [2],它可能會從中找到想法/靈感。 [3] (項目已死)

我真的很感興趣,但:DDD的哪些方面你認爲會對你有好處嗎? 「領域驅動」方面,還是實施方面?

+2

我一直感興趣的資料庫,但鏈接是死了...... – Kjellski 2014-02-08 10:46:46

+0

我也一樣,鏈接仍然是死 – mfeineis 2015-01-29 17:04:08

+0

對不起球員,但該項目已經死了一段時間。 – 2015-01-30 11:03:47

3

1:取決於。 C#中的值類型用於原子類型(int,byte等)。如果你有這樣的事情 - 這是有道理的。如果您的值類型較大,則不。

2:否。通常這不是語言功能。

我建議在明年讀:斯科特·安布勒的「建設目標應用程序的工作」。

2

1 - 如果語言支持它,值類型應該是真正的「值類型」嗎?

我認爲這個問題的答案將取決於使用情況和您的應用程序中的其他因素,但你可能尋找的模式是「數據傳輸對象」,它具有的屬性,干將,和setter方法,但沒有別的。它可以是一個結構體或一個對象,對象可能會簡化內存管理問題,特別是在裝箱方面。

2 - 有沒有在C#,使更清晰的語言和模型之間的關聯的任何特徵(例如,這是一個實體,這是一個聚合等)

我會去與命名約定,例如, 「CustomerEntity」, 「OrderAggregate」 等

好問題;我期待着看到迴應。

1

1 - 如果語言支持它,值類型應該是真正的「值類型」嗎?例如C#中的一個結構#

不要混淆「Value Object」的DDD概念和「Value Type」的CLR概念(C#中的結構)之間的混淆。前者與設計有關,而後者是較低層次的實現考慮因素,與內存管理相比,其實更重要。

2 - 有沒有在C#,使更清晰的語言和模型之間的關聯的任何特徵(例如,這是一個實體,這是一個聚合等)

當解決實體與值,是的。我們發現在C#中使用readonly對於在DDD中實現值對象非常有用。我們在Pluralsight中以很大的方式擁抱DDD,並不時在Pluralsight博客上關於它的博客。事實上,我已經安排了兩篇關於只讀和DDD的博客文章,以便本週晚些時候出版。

[1] http://blog.pluralsight.com/tag/ddd/