web-dev-qa-db-ja.com

このコーディング慣行の用語はありますか?

既存のシステムに機能を導入する際の偶発的な複雑さの1つは、プログラマーがすぐに隣接していないコードのいくつかの領域に触れなければならないことが多いことです。長い間、他の場所にある別のビットに関連するコードを見ると、不明確になる可能性があります。それは醜いデザインであり、メンテナンスの危険性もあります。私の本では、優れたコードの特性の1つは、概念を1か所にローカライズしておく機能です。これは、アーキテクチャに事前に組み込まれているため、新しい機能をシステムに簡単にプラグインできる場合があります。

実行時にすべてのクラスが拡張に対してオープンなままであるスクリプト言語では、言語を独自のプラットフォームと考えるのは簡単で、プラグインの方法を形式化する方法はありません。スクリプト言語で記述されたアプリは、モジュールを受け入れることができます。モジュールはさまざまなシステムコンポーネントにアクセスし、それらを変更します。機能へのアスペクトの追加、イベントへの配線などです。基本的に、アーキテクチャは拡張用に適切に設計されていないため、貧乏人のプラグインシステムを利用しており、多くの場合、これで十分です。事実上、複数のスポットを直接変更する必要がなくなり、代わりに、おそらく同様のスポットで自動化された方法でシステムを微調整します。

それが私が焦点を当てていることです。システム全体に分散しているものを変更する必要がありますが、変更全体を単一のファイル(モジュール)にローカライズする方法で変更します。

すべてのコード(触手がある場合でも)を単一の物理的な場所(独自のファイル)に単純にローカライズするためのデザインパターン/用語はありますか?多くの場合、スクリプト化されたシステムは拡張性を考慮して設計されていない可能性があるため、プラグインパターンまたは拡張性パターンかどうかはわかりません。ただし、変更をローカライズすることは可能です。これは単にモジュール性と呼ばれますか?私は本当に、すべての説明なしで概念を正しく伝えるために使用できる共有用語を探しています。

3
Mario T. Lanza

デザインパターンは( ウィキペディアを引用 )「一般的に発生する問題に対する一般的な再利用可能なソリューション」です。問題の特定の解決策ではなく、優れたコードの特性を説明しているため、「デザインパターン」は実際には当てはまりません。

あなたが探しているコンセプトは 結束 だと思います。厳密に言えば、凝集性とは、モジュールの各部分がどれだけうまく結合しているかを指しますが、1つの機能を変更するために複数の異なるモジュールに触れる必要がある場合は、凝集性が不足している必要があります。

関心の分離 は関連する概念です。

モンキーパッチ (説明しているように、実行時にクラスを拡張する動的言語の機能。問題を簡単に引き起こす可能性があるため、通常は悪い考えと見なされます)とについて読むこともできます。 アスペクト指向プログラミング (横断的関心事を単一のモジュールに入れるためのより構造化されたアプローチ)。

4
Josh Kelley