1

我收到了產品和付款人的集合。付款人可以通過三種不同的方式爲產品付款,但手動設置百分比,付款人收入或付款人各自持有的價值。產品付款方式取決於產品的枚舉。映射與服務層或業務邏輯位置

在我的持久層中,我有三個類Product,Payer和ProductManuallyPaid,它是Product和Payer之間的多對多類,如果產品是通過手動支付的,指定每個Payer必須支付的百分比。

我應該如何將其映射到視圖?我希望有一個新的多對多課程(其中包含對付款人的引用,對產品的引用以及付款人應支付的確切金額)?

我猜這個計算應該在服務層完成,但是服務層應該返回一個帶有新的多對多類的Product/Payer的ViewModel/DTO版本,還是應該在以後處理?如果事後應該處理,實體是否應該包含新的多對多類的列表,但在持久層中被忽略?

回答

3

DDD可能會建議您採用一種思路,首先關注對象模型的設計,而不是ER /數據模型。我看到你已經考慮過數據模型應該如何看待(使用多對多表格等),但也許你應該考慮對象模型可能首先看什麼。然後,由於該對象模型反映了域(業務邏輯,業務行爲),請考慮如何將該對象模型映射到數據庫。

例如,返回具有Payments集合的產品可能更有意義。並且每筆付款都有一個到付款人實體的鏈接。根據您的設計,付款人鏈接可能有您想要訪問的付款人信息的副本,或者該鏈接知道如何加載完整的付款人實體以獲取必要的信息/值。 此外,每個Payer實例可能都有一組支付(與上面相同的類別類型,甚至?)鏈接回該產品。

該設計更好地利用了面向對象的原則,並且比關係數據庫的方式更好地描述了領域。此外,這些對象可能更容易在服務和UI層中處理,因爲它們的本機對象結構已經爲您提供了所需的東西。即。一個產品有付款,其中有付款人等。

我對DDD認爲自己是合理的新手。在DDD這個詞令你害怕之前,請看看這個summarised version of Evan's book。這是一個輕讀和免費下載。它可能只是給你你一直在尋找的寶石。

+0

+1指向摘要免費電子書,謝謝。 – gsk