我想用的是吉米·尼尔森在他的书中Applying DDD with Patterns提到的一个想法,那就是,如果我有一个像产品例如,我将一个实体喜欢拍摄该实体的历史信息的快照,类似ProductSnapshot但我想知道我可以如何实现这与一个ORM(我目前正在使用实体框架)。我现在面临的主要问题是,如果我有另一实体像订单行是通过其构造函数接收产品那么实体框架将需要你做的那种类型的公共财产要持续存在,因此这会强迫我有这样的事情:管理实体和其快照与ORM
class OrderLine {
public Product Original Product {get; set;}
public ProductSnapshot Snapshot {get; set;}
}
,这似乎笨拙,不直观,我不知道如何处理得当,当涉及到数据绑定(对哪些财产我应该绑定)最后我认为产品是实体而ProductSnapshot是值对象加上订单行被接受时,快照只取,之后不需要产品。
您如何看待绑定问题,因为如果我只有一个ProductSnapshot类型的属性,那么该属性将为null,直到OrderLine被确认,并且同样的事情会发生,如果我有一个产品类型的属性,但在相反的情况? –
我想你误解了我。产品快照是一个将由存储库保存的业务对象。 OrderLine类可能包含产品快照,但这不是EF问题。存储库应该知道如何在有或没有产品或快照的情况下组装ORDERLine。该存储库使用EF来获取相关数据,然后将所有内容放在一起。简而言之,保持Domain和Persistence层分离,并且在建模业务对象时不要混合ORM。 ORM可帮助您更轻松地使用db,但存储库负责处理业务对象。 – MikeSW
您必须决定此处的OrderLine,Product和ProductSnapshot是否是业务对象,或者它们是我希望不用于对域进行建模的EF实体。 – MikeSW