日あたりの1つのデザインパターンファーストポスト
6457 ワード
なぜですか.
よく設計されたパターンは本当に私の強いポイントではなく、自然に私たちがしなければならない取得します.それは完璧ではないので、あなたの批判は歓迎です.
日の問題?
最近、私は別の開発者仕事を見る機会を得ました.開発者は、特定のAPIに協議するアプリケーションを書いていた.APIは最近改訂されました、そして、上部管理はアプリケーションが配備構成に従い両方のバージョンに話すことができたことを望みました.
どのように、開発者は問題を解決しましたか?
開発者は
if
アプリケーションの各ルートの下のコントロール構造は、APIの3つのバージョンの適切なコードを実行する.アプローチによる知覚問題?
私の考え?
私の観点から、問題はAPIバージョンを選ぶこととそれから適切なAPIインスタンスをつくることを含みます.それはクラスのインスタンス化とオブジェクトの作成の下で落ちる可能性があるようです.
どうやってそれをやったのだろう?
インタフェース:
public interface API
{
public void doSomething();
public void doOneMoreThing();
}
APIインスタンス
public class ApiV1 implements API
{
public void doSomething()
{
// doing something
}
public void doOneMoreThing()
{
// doing one more thing
}
}
public class ApiV2 implements API
{
public void doSomething()
{
// doing something but slightly differently
}
public void doOneMoreThing()
{
// doing one more thing but slightly differently
}
}
工場
public class APIFactory
{
private Map<String, API> apiMap = Map.ofEntries(entry("v1", ApiV1),
entry("v2", ApiV2));
public API getApiIstance (string version)
{
if (!this.apiMap.containsKey(version)) {
throw new IllegalArgumentException("Passed API version does not exist.");
}
return this.apiMap.get(version)();
}
}
使用法:
// assuming there is a config somewhere
API apiv1 = APIFactory().getApiInstance(config.apiVersion);
まとめ
そうerm、はい.完璧ではなく、おそらく正しい方向へのステップ.
Reference
この問題について(日あたりの1つのデザインパターンファーストポスト), 我々は、より多くの情報をここで見つけました https://dev.to/danielmwakanema/one-design-pattern-per-day-day-1-also-first-post-3480テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol