2016-09-15 93 views
1

我想實現DDD體系結構到我的應用程序模塊,並遇到存儲類似(取決於)結構之間的問題。golang從屬模塊的DDD實現

在第一個包我儲存的一切,是與實體:服務(資料庫),控制器,模型等..

在第二個包我存儲是另一實體的一切公寓:服務(資料庫),控制器,模型等..

每個公寓可以包含多個租戶它們存儲在數據庫中的結構相同

一些公寓一攬子服務應該能夠調用諸如獲取/更新/ ...... 租戶方法。我很樂意不重新實現這些操作,並在人民PeopleService使用它們從實現,但該服務返回人民實體,而不是租戶

我應該創造更多的結構(複製粘貼完整的源代碼)到公寓包,把它租戶和轉換的PeopleService它的返回類型?

或者還有另一種方法嗎?

另外,我應該在哪裏存儲具體實體的服務/存儲庫接口(類似CRUD的方法的接口)?應該接口PeopleService都在公寓包?

謝謝。

+0

DDD不是架構。 DDD與CRUD無關。如果您可以在您正在處理CRUD的實體和服務中複製粘貼代碼,並且根本不需要DDD和域模型。獲取CRUD應用程序生成器並完成此操作。 – plalx

回答

3

可能會有不同的方法,並坦率地說,這個問題可能應該關閉太寬鬆&意見爲基礎。

我可能會做這種方式:

  1. 解耦在一個單獨的包models所有鏈接模型。

  2. 使用人物 - >租戶的構圖,例如, type Person { Name string } type Tenant struct { Person }

  3. 問候人民< - >公寓 - 創建一個包tenants將與模式操作的人&公寓&服務。
+0

感謝您的回答!是的,問題可能真的太籠統了。我只是認爲將模型解耦到單獨的包似乎不像DDD方式......我已經使用過組合,但它沒有幫助代碼冗餘:人員模型應該在Apartment和Tenant包中。將租戶分離到另一個包是一個很好的解決方案,它會嘗試一下,它可以爲Person添加更多字段(如'他的公寓'),使其成爲Tenant,但不能爲Apartment做同樣的事情(如'租戶'),因爲對於Apartment操作,我們使用Apartment包。 –

+0

您不能同時具有獨立性和雙向意識。 可能沒有必要讓公寓知道租戶的任何信息,但只需要列出ID。然後你可以做一些'tenants.GetByIDs(apartment.CurrentTenantIDs)'。 對答案的贊成與「謝謝」一樣好;) –