出版

設計の対称性とは、あるメソッドが効果をもたらす場合、論理的に反対のメソッドは反対の効果をもたらすはずであることを意味します。このJavaのヒントで、David Petersheimは、これが微妙な点でありながら、結果が非常に重要になる可能性がある理由について説明します。
この文脈において、デザインの対称性
とは、ある手法が効果をもたらす場合、論理的に反対の手法は
反対の効果をもたらすはずであることを意味します。これは微妙な点かもしれませんが、
結果は非常に重要になる可能性があります。
例えば、次のようなケースを考えてみましょう。ConversionService
という型があり、これは一般的なライフサイクル
パターンを実装しています。
パブリックインターフェースLifeCycle {
void init();
void start();
void stop();
void destroy();
}
…
public class ConversionService は LifeCycle を実装します {
private Connection conn;
…
public void init() {
conn = new
Connection(getServerConfig());
conn.open();
}
パブリック void start() {
…
}
パブリックvoid stop() {
…
}
パブリックvoid destroy() {
conn.close();
conn = null;
}
}
ConversionService の init() メソッドでは、
Connection オブジェクトが作成され、開かれます。サービスの存続期間中
、Connection オブジェクトは繰り返し使用されます。その後、
サービスが恒久的にシャットダウンされる際に、destroy()
メソッドが呼び出されます。
destroy() メソッドは
init() メソッドの論理的な逆動作であるため、Connection はここで
破棄する必要があります。同様に有効な別の方法として、
start() メソッドで Connection を作成し、stop()
メソッドで破棄する方法があります。目的の効果に基づいて、使用する方法を選択してください
。init() メソッドで Connection を作成し
、stop() メソッドで破棄するのは誤った選択です。
クラスを、正反対のメソッドが正反対の効果を持つように構成することで、クラスが
使いやすくなり、予期せぬ動作を防ぐこと
ができます。オブジェクトが日常的で
あればあるほど、より良い結果が得られます。
毎週木曜日に配信される無料のJavaニュースレターでは、このプログラミング言語の潜在能力を最大限に引き出すために必要な洞察と実践的なヒントをお届けします。今すぐ登録して、今すぐ始めましょう!

デビッド・ペータースハイム