一言:抽象化
300 個のプロパティからなる巨大なクラスが 1 つある場合、プロジェクト全体で大きな塊の抽象化は 1 つしかありません。
それを使用しているのはあなただけかもしれませんが、何年も後に戻って何かを変更する必要がある場合、おそらく自分が行ったことに困惑するでしょう.
以下のこのクラスは問題ありませんが、一部の機能が除外される可能性があります。
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string FullName { get; set; }
public char Gender { get; set; }
public string Social { get; private set; }
}
これらのプロパティはすべて関数型プログラムで使用できますが、さらに多くの機能を提供できます。
以下の例は、Social を独自のクラスに抽象化するためにリファクタリングされていSSN
ます。
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string FullName { get; set; }
public char Gender { get; set; }
public SSN Social { get; private set; }
}
public class SSN
{
public const int SSN_LENGTH = 9;
public string FirstThree { get; set; }
public string MiddleTwo { get; set; }
public string LastFour { get; set; }
public SSN(string ssn)
{
FirstThree = ssn.Substring(0, 3);
MiddleTwo = ssn.Substring(2, 2);
LastFour = ssn.Substring(5, 4);
}
public string ToString(bool format = false)
{
string formatDelimiter = "";
if (format)
{
formatDelimiter = "-";
}
return FirstThree + formatDelimiter + MiddleTwo + formatDelimiter + LastFour;
}
}
Social をクラスに抽象化することSSN
で、社会保障番号をより詳細に制御し、機能を追加できるようになりました。ソーシャルの最後の 4 つで人を探す場合、次のコードを簡単に使用できます。
string lastFour = "0000";
List<Person> Persons = new List<Person>();
Person foundPerson = Persons.Where(x => x.Social.LastFour == lastFour).First();
これはほんの一例であり、より複雑なパーツに拡張できます。これにより、システムの機能が向上し、理解しやすくなります。