我有一个组合DTO,在其中属性是原始值或其他DTO(在许多地方出现)。
例如:
- PersonDto - Name - Surname - AddressDto - Street - Number - ContactDto - PhoneNo - EMail
在此示例中,AddressDto和ContactDto在许多其他DTO中使用(不仅是PersonDto),因此我倾向于向这些DTO添加一些业务逻辑。特别是我想向这些DTO添加更新逻辑(例如:定义IUpdateable接口)来处理DTO的信息持久化方式。
以这种方式,当我必须处理DTO时,我可以检查它是否是组合DTO,在这种情况下,我知道我可以依赖于父DTO中包含的IUpdateable子DTO来获得“正确的更新逻辑”。
但是我有一种感觉,这不是正确的方法,DTO(如名称所示)应该只携带信息而没有业务逻辑。我也不喜欢将逻辑附加到DTO中的想法,因为那么我就受限于该特定逻辑(如果我需要具有完全相同结构但不同更新逻辑的ContactDto,则我的唯一选择是派生一个新类型...,这似乎很丑陋)。
话虽如此,到目前为止,我已经沉迷于仅在DTO上使用接口,如果接口仅是描述DTO“范围”的“标记”,在这种意义上,它保证DTO将包含具有特定含义的某些属性。
但现在我不清楚如何实现两个目标:
- 我想“标记”DTO,以明确表明DTO可以用于某些功能(例如:在先前的示例中,DTO可在某种程度上存储) - 我希望明确和“封装”处理DTO功能的逻辑(存储DTO的方式)
可选地,我希望以最简单的方式实现上述目标,而不需要太复杂的架构。
例如:
- PersonDto - Name - Surname - AddressDto - Street - Number - ContactDto - PhoneNo - EMail
在此示例中,AddressDto和ContactDto在许多其他DTO中使用(不仅是PersonDto),因此我倾向于向这些DTO添加一些业务逻辑。特别是我想向这些DTO添加更新逻辑(例如:定义IUpdateable接口)来处理DTO的信息持久化方式。
以这种方式,当我必须处理DTO时,我可以检查它是否是组合DTO,在这种情况下,我知道我可以依赖于父DTO中包含的IUpdateable子DTO来获得“正确的更新逻辑”。
但是我有一种感觉,这不是正确的方法,DTO(如名称所示)应该只携带信息而没有业务逻辑。我也不喜欢将逻辑附加到DTO中的想法,因为那么我就受限于该特定逻辑(如果我需要具有完全相同结构但不同更新逻辑的ContactDto,则我的唯一选择是派生一个新类型...,这似乎很丑陋)。
话虽如此,到目前为止,我已经沉迷于仅在DTO上使用接口,如果接口仅是描述DTO“范围”的“标记”,在这种意义上,它保证DTO将包含具有特定含义的某些属性。
但现在我不清楚如何实现两个目标:
- 我想“标记”DTO,以明确表明DTO可以用于某些功能(例如:在先前的示例中,DTO可在某种程度上存储) - 我希望明确和“封装”处理DTO功能的逻辑(存储DTO的方式)
可选地,我希望以最简单的方式实现上述目标,而不需要太复杂的架构。
ContactRepository
。 - StepUp