0

ご挨拶、

次のように、ファイルから構築できる特定のオブジェクトがあります。

public class ConfigObj
{
     public ConfigObj(string loadPath)
     {
          //load object using .Net's supplied Serialization library
          //resulting in a ConfigObj object
          ConfigObj deserializedObj = VoodooLoadFunction(loadpath); 

          //the line below won't compile
          this = thisIsMyObj; 
     }
}

要するに、「わかりました。デシリアライズしたばかりのこのオブジェクトは、実際のオブジェクトです」と言いたいのです。これを行うにはいくつかの方法があり、どれがベストプラクティスと見なされるのか疑問に思っています。私のアイデアは次のとおりです。

  • フィールドごとにオブジェクトをコピーする copy-into-me 関数を構築します。これは現在の実装であり、新しいメンバーがオブジェクトに追加されるたびに、それを「copy-into-me」関数に追加することも覚えておく必要があるため、これは恐ろしい考えであると確信しています。これを維持する方法はありません.
  • オブジェクトをロードするための事実上のコンストラクターとして機能する ConfigObj クラスの静的メソッドを構築します。これははるかに優れているように聞こえますが、ベストプラクティスとは言えません。

しかし、私はどちらにも完全に満足しているわけではありません。ここで認められているベストプラクティスは何ですか?

4

3 に答える 3

3

2 番目のオプションは、ファクトリ メソッドと呼ばれるもので、一般的な設計手法です。この手法を実際に使用する場合、実際にクラスをロードする前に、ロードするクラスのタイプを知る必要がある場合があります。このような状況に陥った場合は、ストリームを見て適切なタイプのクラスのファクトリー メソッドを呼び出す、より高いレベルのタイプのファクトリーを使用できます。

于 2008-10-16T09:21:18.830 に答える
2

コンストラクターの代わりに静的メソッドを使用しても問題はありません。実際、多くの利点があります。

于 2008-10-16T09:30:01.217 に答える
1

私は常に静的メソッドを使用します。通常、ロードされるのは一種の階層であるため、ルート オブジェクトのみがメソッドを必要とします。また、これは .NET フレームワーク (Graphics.FromImage など) では珍しいアプローチではないため、クラスのユーザーにとっては問題ないはずです。

于 2008-10-16T09:15:38.547 に答える