我经常看到classes喜欢
public class Person
{
string FirstName { get; set; }
string MiddleName { get; set; }
string LastName { get; set; }
int Age { get; set; }
}
其中一个属性,比如MiddleName在这个例子中(因为有些人在出生时没有中间名),是允许的null。在我看来这是错误的,因为该类的任何消费者都必须知道该属性“可能”为空并执行类似的检查
public void PrintName(Person p)
{
Console.WriteLine(p.FirstName);
if (p.MiddleName != null)
{
Console.WriteLine(p.MiddleName);
}
Console.WriteLine(p.LastName);
}
我如何处理这个是通过使用像
public interface IPerson
{
string FirstName { get; }
string LastName { get; }
int Age { get; }
}
public interface IMiddleNamed
{
string MiddleName { get; }
}
和
public void PrintName(IPerson p)
{
Console.WriteLine(p.FirstName);
if (p is IMiddleNamed)
{
Console.WriteLine((p as IMiddleNamed).MiddleName);
}
Console.WriteLine(p.LastName);
}
即使我的模型代表数据合同(例如,通过服务间通信序列化/反序列化的“价值袋”)也是如此。
以同样的方式,我避免使用具有null-able 值类型的类,例如
public class Something
{
public int SomeInt { get; set; }
public double? SomeDouble { get; }
}
出于同样的原因。
但是我想知道这是否像“OOP 过度工程”,因为它显然增加了很多开发时间。
三国纷争
www说
相关分类