c# – 我是否过度使用Nullable类型?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 我是否过度使用Nullable类型?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2027字,纯文字阅读大概需要3分钟。
内容图文
![c# – 我是否过度使用Nullable类型?](/upload/InfoBanner/zyjiaocheng/802/e772c6387ef9456881bf871c6d1f52e0.jpg)
我将所有字段设置为可空类型,其中它们对应的后端数据库字段允许空值.好?坏?
长版:
它工作得很好,我只是觉得我可能会滥用我可以使东西可以为空的事实.
基本上,它是一个与我们的SQL数据库相关联的员工管理的内部应用程序.我使用的是三层结构,从演示到后端:Business Objects – >业务逻辑 – >数据访问.
对于我的Employee对象,我有以下字段:
public class Employee : Person
{
private EmployeeTitle? _employeeTitle = null; //enum
private EmployeeType _employeeType; //enum
private DateTime _startDate;
private DateTime? _endDate = null;
private EmployeeInsuranceRecord _employeeInsuranceRecord = new EmployeeInsuranceRecord();
//...
}
public class EmployeeInsuranceRecord
{
private int? _employeeInsuranceRecordID = null;
private string _alienRegistrationNumber = null;
private string _healthInsuranceNumber = null;
private string _unemploymentInsuranceNumber = null;
private string _welfarePensionNumber = null;
private DateTime? _insuranceAcquiredDate = null;
//...
}
在我的数据库中:
> EmployeeTitleID允许空值.例如,员工可以在试用期内开始,没有固定的职位.
> EmployeeTypeID不允许空值.即使员工是客人或试用期,也必须明确选择这一点以用于记录目的.
> StartDate不允许空值.如果有人进入数据库,我们需要知道他们何时开始.
>然而,EndDate确实允许空值.目前受雇的任何人还没有EndDate.
>我在Employee实例化上实例化一个EmployeeInsuranceRecord对象,但EmployeeInsuranceRecord中的每个字段都可以为空,因为EmployeeInsuranceRecords进入一个通过ID链接的单独表,因此Employee可以在没有EmployeeInsuranceRecord的情况下存在(对于刚刚开始的人来说,仍然在最初的文书工作中很常见)处理).通过从一开始就实例化EmployeeInsuranceRecord,我可以通过不在那里实例化任何类来保持我的表示层更清晰.考虑到我们正在进行的小规模,这对性能没有影响.
解决方法:
null的一个烦恼是在取消引用/消耗值之前继续检查null的编码开销 – 您可能需要使用一堆静态扩展方法来使您的生活更轻松.
但是使用null比使用像DateTime.MinValue这样的“魔术值”更好 – 这不仅会破坏数据,而且如果您忘记将其映射回null,则在持久保存到数据库时可能会出现问题.
如您所述,某些值成为强制性的,因为它们是“状态”依赖的(例如,当员工辞职/退休/被解雇时需要EndDate).您需要根据此分割出验证策略.
内容总结
以上是互联网集市为您收集整理的c# – 我是否过度使用Nullable类型?全部内容,希望文章能够帮你解决c# – 我是否过度使用Nullable类型?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。