ここで使用される悪い習慣にコメントしないでください。私は、このシナリオの抽象化に簡単な例を用いて取り組んでいます。抽象化チャレンジこの目的のためにカプセル化に近づく方法
私は、ユーザーが特定の構成パラメーターでTASKというエンティティーを入力し、後でそのタスクに特有のアクションをTASKに実行させるシステムをモデル化しようとしています。
タスク定義の例を次に示します。
*ディレクトリ{パス}にファイル{ファイル名}を作成します。
*ファイル{filename}を{source directory}から{target directory}にコピーします。
* {メモ帳アプリケーション}を開き、テキスト{サンプルテキスト}を入力して{filename}として保存します。
* {sample.docx}を開き、2番目の段落の最後に{sample text}というテキストを入力します。
各タスクにはわかりやすい名前と最大5つのパラメータがあります。上記の例では、パラメータは中括弧{}で囲まれています。ユーザーは上記のタスクを実行するように指示され、アプリケーションは完了したかどうかを確認します。タスクは実質的に何もすることができ、
public abstract class TaskBase { public abstract void Perform(param1, ... param5); }
public class TaskFileCopy: TaskBase { public override void Perform(param1, ... param5) {} }
問題があり、プログラムの後にコンパイルされ、展開されている:私は次のクラスを作成し、静的な世界では
:各タスクには、以下の機能を持っている必要がありますより多くのタスクを追加する必要があります。最初に、そして最悪のことは、TaskBaseから派生し続け、実行、再コンパイル、再デプロイメントを実装し、以前のタスク結果をそのまま維持することです。
ここでは2つの問題が発生します.2,000個のタスクを実行する頃には、最大2,000個の派生クラスがあり、2番目に、基礎となるOODBが塞がることになります。
私はSystem.AddInをある時点で考えていましたが、このシナリオがOOP設計の中でより良い解決策を持っていると確信しています。
ええええええええええええええええええええええええええが増えるまでは、今のところ私は継承を続けています。あなたの提案に加えて、私はまた、コードやコンパイルされたモジュールを格納し、リフレクションを使用して実行時にそれらを実行することも検討しています。私はMEFをよく理解する必要があります。コンポジットパターンは候補になる可能性がありますが、それはタスクがどれほど多様であるかを少し知っています。 –