我正在处理一些遗留代码,其中有很多像这样的代码:
public class Person
{
public Person(PersonData data)
{
this.Name = data.Name;
this.Gender = data.Gender ;
}
public String Name { get; private set;}
public String Gender { get; private set;}
}
public class PersonData
{
public String Name;
public String Gender;
}
public static Person ReadPerson(Reader reader)
{
PersonData data = new PersonData;
data.Name = reader.ReadString();
data.Gender = reader.ReadString();
Person p = new Person(data);
return p;
}
PersonData类存在的目的是在其构造函数中设置Person类中的私有字段。除此之外,PersonData类引入了冗余代码,因为你可以看到现在在Person和PersonData类中都有Name和Sex。在我看来,这种设计不具备可扩展性:现在我有一个新字段“Age”要读取,我必须在两个不同的地方添加“Age”属性。鉴于我已经在遗留代码中看到了很多这样的代码,这是一个有效的设计选择吗?我该如何重构它?
编辑:这两个类是真实代码的简化版本。因此,请原谅使用字符串而不是枚举来表示性别。在真实代码中,PersonData有超过10个字段,Person类也是如此。