1

我是一名新開發人員,我從未在大型企業公司工作過,因此我對多層應用程序中的命名約定有疑問。我有一個WPF/MVVM應用程序,EF數據層。我也想調整DDD原則。多層應用程序中模型的命名約定

所以,我會說同一班的三個模特。我在MVVM中有「模型」,我在EF中有一個實體/ dto(我不知道?),我在DDD中有域模型/ POCO。我必須創建所有這3個類來分離問題(也許我可以將MVVM模型與POCO合併,我的意思是,POCO在MVVM中是一種模型)。我應該如何命名它們?

假設我有Person POCO。 EF中應該是「Person」還是「PersonDto」?一般慣例是什麼?我遇到了兩種方式w/wo Dto後綴,所以我很困惑。

回答

4

我通常後綴DTO和ReadModels/ViewModels,但不是域對象。

沒有硬性規定,這是個人(或團隊)偏好的問題。有些人想讓命名空間代替它,但我覺得它不夠明確。我有not a huge fan有一個單獨的「持久性模型」(我是not the only one)。在任何情況下,我都不會在該層調用對象DTO's。

+1

好文章。 percistance agnostic並不一定意味着單獨的DAO的percistance – Batavia

+0

感謝這些文章。我會在一分鐘內閱讀它們。你不會調用EF模型類DTO的。那麼,簡單的「人」? –

0

幾個月前,我遇到了下面的文章,它爲我的項目命名類/實體時確實有意義。

Naming Conventions - XAML made easy

我hople它會幫助你太

+0

但是這篇文章沒有提到命名模型。這是關於View和ViewModel的,不是嗎? –

+0

同樣適用於模型,請將「模型」單詞與模型類名稱一起使用。 –

3

DTO:e.g:PersonDto

一個DTO是一個對象,它定義了數據如何將在 網絡發送。

POCO:e.g:Person

實體框架使您可以使用自定義數據類一起 與您的數據模型,而無需進行任何修改數據 類本身。這意味着您可以在數據模型中使用「普通舊」CLR 對象(PO​​CO)(例如現有的域對象)。 這些POCO數據類(也稱爲持久性無關對象), 被映射到在數據模型中定義的實體,支持 大部分相同的查詢,插入,更新和刪除行爲與實體 類型由實體數據模型工具生成。

希望這對你有幫助。

+0

謝謝,我的理解是正確的?你是否建議我將我的領域模型類用作我的數據層/實體框架的實體? –

+0

是的,你是對的。前進,這樣做。祝你好運! :) – Sampath

+0

感謝您的提示,但我不認爲這是一個好主意。您必須分離關注點,因此您不能將域模型用作持久性模型。閱讀此http://blog.sapiensworks.com/post/2012/04/07/Just-Stop-It!-The-Domain-Model-Is-Not-The-Persistence-Model.aspx –

0

我也想調整DDD的原則。

那麼絕對必須的是域模型中使用的名稱必須與域專家的無處不在的語言相匹配。

+0

EF實體如何?他們是否應該後綴「Dto」? –

1

我認爲重要的是要記住的是一個人不是一個人。你想分開他們的原因是因爲他們可能會做很不同的事情。

例如,我可以有

人數據庫類/對象

(其中的一個子集),這映射到學生的域對象

,然後前端發送AddressChange更新的學生。

當然你也可以有Person,PersonDTO和PersonDB,甚至是PersonVM(比如你在前端使用JavaScript類型)。需要記住的是,你將它們分開,因爲它們「完全不同」。如果你迫使它們總是完全一樣,那麼真的沒有理由將它們分開。