最近、コードの一部を保護することを考えています。オブジェクトを直接作成できないようにする方法に興味がありますが、ファクトリ クラスのメソッドを介してのみ作成できます。いくつかの「ビジネス オブジェクト」クラスがあり、このクラスのすべてのインスタンスが有効な内部状態を持つようにしたいとします。これを実現するには、オブジェクトを作成する前に、おそらくそのコンストラクターでいくつかのチェックを実行する必要があります。このチェックをビジネス ロジックの一部にすることを決定するまでは、これで問題ありません。では、ビジネス ロジック クラスの何らかのメソッドを介してのみビジネス オブジェクトを作成可能にし、直接は作成できないようにするにはどうすればよいでしょうか。C++ の古き良き "friend" キーワードを使用したいという最初の自然な欲求は、C# では不十分です。だから、他のオプションが必要です...
いくつかの例を試してみましょう:
public MyBusinessObjectClass
{
public string MyProperty { get; private set; }
public MyBusinessObjectClass (string myProperty)
{
MyProperty = myProperty;
}
}
public MyBusinessLogicClass
{
public MyBusinessObjectClass CreateBusinessObject (string myProperty)
{
// Perform some check on myProperty
if (true /* check is okay */)
return new MyBusinessObjectClass (myProperty);
return null;
}
}
入力をチェックせずに MyBusinessObjectClass インスタンスを直接作成できることを思い出すまでは、問題ありません。その技術的な可能性を完全に排除したいと思います。
それで、コミュニティはこれについてどう思いますか?