私はレガシーコードに取り組んでおり、次のようなコードをたくさん見ました。
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」を読み取る必要があるため、2つの異なる場所に「Age」プロパティを追加する必要があります。
これは有効な設計上の選択ですか(レガシーコードにこのようなコードがたくさんある場合)?
これをリファクタリングするにはどうすればよいですか?
編集:
これらの2つのクラスは、実際のコードの簡略化されたバージョンです。したがって、性別の列挙型の代わりに文字列を使用することはご容赦ください。
実際のコードでは、PersonDataにはPersonクラスのように10を超えるフィールドがあります。