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