2011-01-24 8 views
2

データをフォーマットAからフォーマットBに変換するクラスを作成する際に、「単一責任の原則」に違反しないようにするにはどうすればよいですか? フォーマットAとBの両方の仕様が変更される可能性があるため、そのようなクラスを変更する理由は2つあります。データの変換時にSRP違反を回避する方法

答えて

3

私はここで新しく、これを私の答えを提案する際に私が伸びている警告で掲示します。

これまでのところ、「単一の責任の原則」のような概念だけを取り入れることができます。私にとって、変換クラスの責任は、あるフォーマット仕様から別のフォーマット仕様へのデータの変換を管理することです。いくつかの考え:用語の厳しいで

  1. は、フォーマットの変更の1つが、あなたは理論的にはまだ、従来のDAT(下位互換性を)変換するためのフォーマットコンバータの以前のバージョンが必要になります。いつ誰かがフォーマットの変更についてのメモを手に入れないかも知れません。または、地下のフォーマットA v1のデータのバッチをどこかで実行するかもしれません。したがって、クラスの単一の責任は、フォーマットA1.0からフォーマットb1.0へのデータの変換のままです。

  2. 仕様のいずれかが変更された場合は、クラスの新しいVERSIONを作成する必要があります。フォーマットAの仕様を変更した人がいるとしましょう。フォーマットA1.1からB1.0へのデータの変換を管理するクラスが必要です。 1つの責任で新しいクラスを作成しました。

プロジェクトのスコープの間、あなたはSRPコンセプトの面で、下位互換性のために必要な要件を考慮していないことは、私の理解では、フォーマット仕様の一方または両方の変化が必要なことです新しいクラスの定義であり、蔓延説の厳密な意味において、複数の責任を暗示するものではない。

最後に、あるフォーマットから別のフォーマットへのデータのマッピングをクラスの単一の責任として考えると、EITHER仕様への変更は依然としてクラスの単一のジョブへの変更だけを必要とします。

最終的な例を図解で示します。私のクラスの責任は、特定の赤の色合いを特定のピンクの色合いに変換することだとします。そして、ある日cheifデザイナーは、彼が出力として明るいピンクを望むと決めましたが、スペックの片面は変わっていますが、私のクラスの責任は変わりません。翌日、最高レベルの企業レベルでは、新しい赤い標準が栗色に似ていると判断されます。今では入力仕様に変更がありますが、私のクラスの責任は変更されていません。私は、新しいクラスを作成することを決定し、holdover用のバージョン1.0を保持するか、既存のバージョンを更新するだけかもしれません。どちらの場合でも、クラスには依然として1つの責任があります。赤の指定をピンクの指定にマッピングします。

関連する問題