当前位置: 首页 > 编程语言 > C#

C#DtoConstructorandDependencyInjection分享

时间:2023-04-10 16:13:37 C#

C#DtoConstructorandDependencyInjection我想知道设计DTO对象构造函数的最佳实践是什么。假设我有一个这样的Dto对象:classCustomerDto{publicstringName{get;放;}publicstring姓氏{get;放;}publicstringPhone{get;放;}...}有几种构造对象的方法:我可以声明一个构造函数:publicCustomerDto(stringname,stringsurname,stringphone,...){this.Name=name;this.Surname=姓氏;this.Phone=电话;...}当您看到ThisconstructordoesimmediatelyendwhenSRP(SingleResponsibility)violationoccurs时?虽然这些属性都是相关的。也可以说不需要验证属性,因为这是一个DTO并且没有行为,行为应该放在这个映射的域对象上。在C#中我们也可以更优雅地构造这个对象:vardto=newCustomerDto(){Name="Somename",Surname="Somesurname"}或者使用fluentbuilder或NBuilder这样的框架。还有Automapper等自动映射框架的使用。问题还在于,对于Ioc容器,构造函数会变得复杂,并且存在交换参数的风险,例如,您在姓氏所在的位置传递名称,反之亦然,验证可能会错过这个比上面的显式映射容易得多的映射。请帮助说服我哪种方法更好。示例中的值类型不是依赖项。依赖项为消费者提供功能(或配置)。在您的情况下,它们只是分配给您的DTO的正常值。只要数据属于一起,即使在构造函数中分配大量值也不会违反SRP。在这种情况下,唯一的责任是保存数据。此外,DTO不应由IoC容器创建,也不应具有真正的依赖关系。您应该通过持久性框架或使用自动映射手动创建它们。使用构造函数或属性赋值更好,这取决于使用情况。如果需要,构造函数变体会更好。如果它们是可选的,则属性方式更好。我建议使用不可变数据结构,这样DTO实体就不会公开任何setter,显然这样构造函数应该能够初始化给定DTO的所有基础属性。所以我更喜欢:publicCustomerDto(stringname,stringsurname,stringphone,...)DTO是一个数据传输对象,特别是用来表示一组要跨系统(分布式)边界传递的属性,所以不要过分它更加关注SRP违规行为。它就像Facade设计模式,它删除了一组操作/服务以简化使用。所以在这个kaseKeepItSimple中获胜。以上就是C#学习教程分享的全部内容:C#Dto构造函数与依赖注入。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。涉及侵权,请点击维权联系管理员删除。如需转载请注明出处: