我正在处理遗留代码,我已经看到了很多这样的代码:
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 类。