在我的N层架构中,我有DTO(AddressResponseDTO),其中我有20个属性。当表示层请求(AddressRequestContext)对我的业务层的特定搜索操作的响应时,我将把这个DTO(AddressResponseDTO)发送给PL。
但事实并非如此。地址搜索请求将被更改有时我只需要发送它的3个属性(比如City,Zip和地址Count),有时候它可能是5.所以我仍然可以使用20个proerties的相同DTO来重用所有类型的搜索请求。
答案 0 :(得分:2)
编写具有20个属性的DTO没有任何害处。
但是,如果可以将属性组合在一起,最好将相关属性分组到实体中,就像您可以将City,Zip分组到一个地址一样。
答案 1 :(得分:2)
由于OP声明有时只使用了3个属性,因此可以有几种解决方案:
创建具有所有属性的DTO,并指定特殊值以显示未指定哪些属性(即使用nullables或特殊值)。这需要在代码中进行大量检查。
使用3个属性创建DTO。从中继承第二个DTO并添加所有剩余的属性。您的方法可以接收基类作为参数,并检查是否收到基类或派生类。像if (myDto is DtoBase) ...
这样的简单检查会快速显示与DTO一起发送的属性。 (这仅适用于在继承的DTO层次结构中增加数量的属性)
如果有多个可能的感兴趣的属性分组,您可以为每个组使用DTO类,并且:
if (containerDto.Dto1 != null)
我不喜欢“特殊价值”的方式,因为它需要更多代码,而且更容易出错。此外,它使你(多)在很多场合序列化更多信息。
答案 2 :(得分:1)
是的,如果空或默认属性在这些情况下不打扰你,你可以。理论上,没有什么可以阻止你在所有情况下使用一个类。
或者,您可以针对不同的用例创建多个DTO类定义。在这种情况下,我建议在这些类之间使用一些类层次结构。
我认为这取决于您和用户喜欢使用的复杂程度。