C#でシリアル化されたXMLからオブジェクトをロードするためのベストプラクティス
-
03-07-2019 - |
質問
ご挨拶、
ファイルから構築できる特定のオブジェクトがあります。
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;
}
}
本質的には「OK」と言いたいのですが、このオブジェクトをデシリアライズしたところです。これが実際にオブジェクトです。」これを行うにはいくつかの方法がありますが、どれがベストプラクティスと考えられているのでしょうか。私のアイデアは:
- フィールドごとにオブジェクトをコピーするcopy-to-to-me関数を作成します。これは現在の実装であり、新しいメンバーがオブジェクトに追加されるたびに「copy-to-to-me」関数に追加することも忘れないでください。 。
- ConfigObjクラスの静的メソッドを作成します。これは、オブジェクトをロードするための事実上のコンストラクターとして機能します。これははるかに良い音ですが、ベストプラクティスではありません。
しかし、私はこの2つのいずれにも完全に満足しているわけではありません。ここで認められているベストプラクティスは何ですか?
解決
2番目のオプションは、ファクトリーメソッドと呼ばれるもので、一般的な設計手法です。この手法を使用する場合、実際にクラスをロードする前に、ロードするクラスのタイプを知る必要がある場合があります。このような状況に陥った場合、ストリームを調べて適切なタイプのクラスのファクトリメソッドを呼び出す、より高レベルのタイプのファクトリを使用できます。
他のヒント
コンストラクタの代わりに静的メソッドを使用しても何も問題はありません。実際、多くの利点があります。
常に静的メソッドを使用します。通常、ロードされるのは一種の階層であるため、ルートオブジェクトのみがメソッドを必要とします。そして、それは実際には.NETフレームワーク(Graphics.FromImageなど)で珍しいアプローチではないため、クラスのユーザーには問題ないはずです。
所属していません StackOverflow