私は、データセットを管理するために使用される6つのメソッドを持つインターフェイスを持っています。実装間で異なる唯一の方法はgetSerializedVersion()
であり、シリアライズ文字列を解析できるコンストラクタです。実装が単一のメソッドでのみ異なる場合は、どのデザインパターンをお勧めしますか?
public interface DataSets {
public void addEntry(...);
public void removeEntry(...);
public void manipulateEntry(...);
public SomeType getEntry(...);
public List<SomeType> getAllEntries();
// This differs:
public String getSerializedVersion()
}
私はインターフェースを変更できません。
私の最初のアイデアは、抽象クラスを生成し、最初の5つのメソッドを実装することでした。具体的な実装(例:DataSetsXML
、DataSetsYAML
、...)は、getSerializedVersion()
とその文字列を読み込んでオブジェクトを初期化できるコンストラクタを実装するだけです。
別のデザインをテストすると、より良い(https://stackoverflow.com/a/7569581)かもしれませんが、どちらが良いでしょうか?
回答は主観的かもしれないが、私は別のアプローチのいくつかの一般的な規則または少なくとも(目的)長所と短所があると思い、...
getSerializedVersion()を実装するために、単一のクラスを使用し、シリアライザに委譲し、コンストラクタに引数として渡すことができます。シリアライザ(YamlSerializer、XmlSerializerなど)のN個の実装を持っています –
@ JBNizetの答えが行く方法です。クラスの責任の観点から、シリアライズはデータセットを管理する以外の仕事のようです。抽象クラスを使用する必要はなく、この設計ミスをさらにエンコードする必要はありません。 – Cardano
@JBNizet:あなたのコメントから答えを書くことはできますか? – Edward