在Ward的文章“The Breeze Server: Have It Your Way”中提到:
典型的业务应用程序至少有200种域模型类型。90%以上的时间,我发送到服务器端的数据形状与我的业务模型实体的形状相同。 …… 当客户端实体的形状与服务器端业务实体的形状不太匹配时,我可能会为该特定情况切换到DTO。
对于我们的应用程序来说,这正是问题的关键所在,但如何才能最好地仅切换一些实体以用于DTO?
例如,我们的用户实体包含不应向客户端公开的敏感属性。它还具有从其他系统拉取并返回给客户端的相关数据,这些数据理想情况下应该只是客户端用户对象上的额外属性。用户似乎是切换到DTO的理想候选人。
如果用户是一个孤立的实体,那么这可能更容易,但问题在于用户基本上随处可见于模型中。例如,几乎每个实体都有一个CreatedBy属性。
是否有一种方法可以在整个模型中将用户实体切换为用户DTO?对于模型中引用用户的所有其他实体,我们仍然需要能够加载它们并展开其用户属性,以查询它们的用户属性,并将更改保存到这些用户属性中。
我不确定如何做这件事,除了构建一个与实体模型95%相同的大型DTO模型,并具有一些映射代码/框架来在它们之间进行转换。但是,正如Ward在这篇文章中所说:“我不喜欢每种类型都使用DTO;那是过度杀伤力的,会破坏生产力。”
典型的业务应用程序至少有200种域模型类型。90%以上的时间,我发送到服务器端的数据形状与我的业务模型实体的形状相同。 …… 当客户端实体的形状与服务器端业务实体的形状不太匹配时,我可能会为该特定情况切换到DTO。
对于我们的应用程序来说,这正是问题的关键所在,但如何才能最好地仅切换一些实体以用于DTO?
例如,我们的用户实体包含不应向客户端公开的敏感属性。它还具有从其他系统拉取并返回给客户端的相关数据,这些数据理想情况下应该只是客户端用户对象上的额外属性。用户似乎是切换到DTO的理想候选人。
如果用户是一个孤立的实体,那么这可能更容易,但问题在于用户基本上随处可见于模型中。例如,几乎每个实体都有一个CreatedBy属性。
是否有一种方法可以在整个模型中将用户实体切换为用户DTO?对于模型中引用用户的所有其他实体,我们仍然需要能够加载它们并展开其用户属性,以查询它们的用户属性,并将更改保存到这些用户属性中。
我不确定如何做这件事,除了构建一个与实体模型95%相同的大型DTO模型,并具有一些映射代码/框架来在它们之间进行转换。但是,正如Ward在这篇文章中所说:“我不喜欢每种类型都使用DTO;那是过度杀伤力的,会破坏生产力。”