郑州专业的网站建设公司,央视网商城网站建设,wordpress 数据库 旧Ip,中文网页设计案例欣赏DTODTO是数据传输对象#xff08;Data Transfer Object#xff09;的简称#xff0c;主要用作在进程之间传送数据。DTO的特点是它不包含任何业务逻辑或行为。下面是一个典型的DTO定义#xff1a;public class UserDto
{public int Id { get; set; }public string Name { ge… DTODTO是数据传输对象Data Transfer Object的简称主要用作在进程之间传送数据。DTO的特点是它不包含任何业务逻辑或行为。下面是一个典型的DTO定义public class UserDto
{public int Id { get; set; }public string Name { get; set; }
}
DTO的不变性在实际使用中我们并没有在进程之间来回传输具体的对象而是使用某种形式的序列化因此DTO的属性不需要更改。另外考虑到DTO的用途如果DTO的属性在传输过程中发生变化数据将不再准确。所以DTO应该以无法更改的方式创建——它们应该是不可变的。class实现方式为什么以前没强调过DTO的不变性呢因为在C#中实现是一件比较麻烦的事。虽然我们可以定义私有setter来实现不可变类型例如public class UserDto
{public UserDto(int id, string name){this.Id id;this.Name name;}public int Id { get; private set; }public string Name { get; private set; }
}
从下图我们可以看到值必须通过构造函数传递给属性。而且正如预期的那样我们无法在创建对象后再为属性赋值然而这种方法有个很明显的缺点如果我们增加一个属性就必须调整一次构造函数。record实现方式从C# 9开始可以使用record关键字定义一个引用类型用来提供用于封装数据的内置功能。它在设计上就具备创建具有不可变属性的能力。例如public record UserDto(int Id, string Name);
是不是非常简洁注意我们定义的是属性所以参数用的PascalCase。而且从下图我们可以看到它与class创建对象方式相同。同样在创建对象后不能再为属性赋值另外有一个附带的好处如果增加了属性立刻可以知道哪些代码位置需要修改public record UserDto(int Id, string Name, string Address);
结论在本文中我们介绍了record类型它使得在C#中使用不可变DTO变得非常简单。如果你觉得这篇文章对你有所启发请关注我的个人公众号”My IO“记住我