バックグラウンド:
これが私が現在取り組んでいるもののコードです。まず、アカウントに関する情報を保持するアカウント クラスであり、ほとんどの部分でクラスのプロパティの値を変更するいくつかのメソッドを持つ基本クラスです。
public class Account {
private string _username; [...]
public string Username { get { return _username; } } [...]
public Account() { }
public Account(string[] args) { [...] }
public virtual void ChangePassword(string newPassword) { [...] }
}
次に、アカウントが作成されたときの別のクラスを用意し、これを ActiveAccount と名付けました。これには、アカウントが作成された後にのみ可能になる、アカウントに使用したいアクションのロジックのほとんどが含まれています。質問を説明するために含める必要のないクラスもあります。想像力を働かせて、これらのクラスが何をするかを想定してください。
public class ActiveAccount : Account
{
private List<Conversation> _conversations; [...]
public List<Conversation> Conversations { get { return _conversations; } } [...]
private ActiveAccount() { }
public static ActiveAccount CreateAccount(Account account)
{
// Navigate to URL, input fields, create account, etc.
}
public override void ChangePassword(string newPassword)
{
// Navigate to URL, input fields, change password, etc.
// Update property using base method, if no errors.
base.ChangePassword(newPassword);
}
}
静的ファクトリ メソッドを使用した理由は 2 つあります。1) カスタマイズ可能で拡張可能なオブジェクトの構築が必要です (たとえば、将来、アカウントを作成するための一般的な情報を提供する AccountTemplate を使用する可能性があります。AccountTemplate パラメーターを使用して、別の静的ファクトリ メソッドのオーバーロードを簡単に作成できます)、および 2 ) パラメーターなしのコンストラクターを使用すると、このオブジェクトをより簡単に XML/JSON にシリアル化できます。
質問:
しかし、Account パラメーターを受け取り、ロジックを実行し、オーバーロードで簡単に拡張できるパブリック コンストラクターを同じように簡単に作成できることに気付きました。パラメーターなしの構築を防ぎ、シリアル化を許可するために、パラメーターなしのプライベート コンストラクターを保持できます。
私はプログラミングにかなり慣れていません。私が疑問に思っているのは、上記で説明したように、パブリック コンストラクターの代わりに静的ファクトリ メソッドを使用する特定の理由があるかどうかです。そして、私がやりたいことをするための好ましい方法は何ですか?