私はストラテジパターンを読んでいましたが、実装しようとしていましたが、私がオープンクローズドの原則に違反していると感じるストラテジ実装を決定するのに苦労しました。ストラテジーパターンとオープンクローズド原則コンフリクト
戦略パターンでは、私たちはインターフェイスに基づいてコードを作成し、クライアントとのやりとりに基づいて戦略の実装を行います。私たちは、クライアントが上記オープン閉鎖原則どおり今
IStrategy str;
if(stragety1) {
str = new Strategy1()
} else if (stragety2) {
str = new Strategy2()
} and so on..
str.run()
のようなものを選択する戦略の条件を使用して決定する必要があるので、我々は戦略の束を持っている場合今
は延長に開いているが、そうではありません変更を完了しました
将来、別の戦略(拡張機能)を追加する必要がある場合は、このコードを変更する必要があります。
これは回避できますか、それとも戦略パターンを実装する必要があるのでしょうか?
私の経験では、実際にはオープン/クローズドの原則はほとんど価値がありません。主な実装には、新しいコードをベースに追加せずに後でカスタマイズすることができるアーキテクチャ上のフックがあります(新しいカスタム部分への新しいコードのみ)。これが実際に失敗する主な理由は、コードが野生であり、誰もが計画していない拡張性の問題にぶつかるまで、アーキテクチャーのフックで考慮する必要がある可変性の次元が何であるかをほとんど決して知らないことです。 – ely
あまりにも多くの計画を立てようとすると、抽象度の高い建築用スープになりますが、それが正しい抽象であるかどうかは誰にも分かりません(使いやすさと保守性に深刻な影響を与える可能性があります)。最終的には、可変性の次元である可能性が非常に高いいくつかのものに対してカスタマイズ可能性を組み込もうとする可能性があります。残りの部分では、ソースコードを変更して解決する必要がありますそれ。 – ely
あなたのコードは私の工場のパターンのようです。 – bpjoshi