ソフトウェアアーキテクチャが言語を発明している
すべてのソフトウェアレイヤーで、あなた(または同僚)が次の上位レイヤーソリューションを表現したい言語を作成します(したがって、私の投稿では自然言語の類似物をいくつか紹介します)。ユーザーは、その言語の読み方や書き方の学習に何年も費やしたくありません。
このビューは、アーキテクチャの問題を決定するときに役立ちます。
読みやすさ
その言語は簡単に理解できるはずです(次の層のコードを読みやすくします)。コードは、書かれているよりもはるかに頻繁に読み取られます。
1つの概念を1つの単語で表現する必要があります。1つのクラスまたはインターフェイスで概念を公開する必要があります。(スラヴ語は通常、1つの英語の動詞に対して2つの異なる単語を持っているため、語彙を2倍習得する必要があります。すべての自然言語は、複数の概念に対して1つの単語を使用します)。
公開する概念に驚きが含まれてはなりません。これは主にgetメソッドやsetメソッドなどの命名規則です。また、デザインパターンは標準的なソリューションパターンを提供するので役立ちます。しかし、単純に具体的なクラスをインスタンス化するだけで十分であれば、私はそれを好むでしょう。
使いやすさ
言語は使いやすいものでなければなりません(「正しい文章」を簡単に作成できるようにする)。
これらすべてのMemCacheクラス/インターフェースが次のレイヤーに表示されるようになった場合、ユーザーは、キャッシュの単一の概念でこれらの単語をいつ、どこで使用するかを理解するまで、急な学習曲線を作成します。
必要なクラス/メソッドのみを公開すると、ユーザーが必要なものを見つけやすくなります(Antoine de Saint-ExuperyのDocBrownsの引用を参照)。実装クラスの代わりにインターフェースを公開すると、それが簡単になります。
確立されたデザインパターンを適用できる機能を公開する場合、異なるデザインを作成するよりも、そのデザインパターンに従う方が適切です。ユーザーは、まったく異なる概念よりもデザインパターンに従うAPIを簡単に理解できます(イタリア語を知っている場合、スペイン語は中国語よりも簡単です)。
概要
使用が簡単になる場合は抽象化を導入します(抽象化と実装の両方を維持するオーバーヘッドの価値があります)。
コードに(重要な)サブタスクがある場合、「予想される方法」で解決します。つまり、異なるタイプのホイールを再発明するのではなく、適切な設計パターンに従います。