2011-12-07 8 views
0

はじめクラスを渡すこととインスタンスを渡すこと。シンプルなAPI設計

私は私が説明しようとしていますAPI /ライブラリは非常に単純であり、本当に私はそれが動作を取得するために何をするかは重要ではありませんが、私は最終的に多くを設計することを願っています知っていますもっと複雑なシステムであり、シンプルで効果的なAPIを設計する方法について、いくつかの良い習慣を得たいと考えています。

情報

私は、コードの一部は、より再利用可能にするためにしばらく前にやったのAndroidプロジェクト(常に練習のための新しい「API」のデザインを試して)を再加工しています。

このシンプルなアプリケーションの一部は、画面上のテキストをシャッフルしています。この「ライブラリ」に基づいて独自のシャッフル効果を持つ3つの異なるプログラムが存在するため、共通のコードを実際のライブラリに引き出し、残りのシステムからのシャッフルの実装。シャッフルを処理するコードはクラスに入れられ、各アプリケーションは、特定のアプリケーションを実行するために必要な値が設定された設定オブジェクトを提供します。現在の設計では、構成オブジェクトは、所望のシャッフル実装のクラスを提供する。その後、必要に応じて、ライブラリはクラスのインスタンスを作成します。

私はライブラリがオブジェクトのすべてを制御し、インスタンスの外部コードへの露出を取り除くことができますが、コンストラクタパラメータ(シャッフル、方向などの速度)を使って実装をカスタマイズすることもできません。 (これに対する解決策の1つは、実装がライブラリによって作成された時からデータを引き出すことができるような配列の配列を渡すことですが、何らかの曇りや難しさの中でパラメータを渡す必要があるライブラリは嫌いです。チェックイン時に、コンパイル時のような設定がらくた「スピード:90; Herpの:DERP」。)

私の質問

ライブラリがあります、それを制御することができますので、それは構成でクラスを渡すことが最善だろうライフサイクル全体、またはこれは実用的ではないので、私はちょうどインスタンスを作成し、それを渡す必要があります。また、クラスを渡すことは実用的ではない場合、クラスを良い考えに渡すときは? (後で何らかのプラグインシステムでルックアップするためにクラスインスタンスのクラスにクラスインスタンスを登録することの他に)

答えて

0

DI(Dependency Injection)を使用すると、オブジェクトのライフサイクルはとしょうかん。ライフサイクルが非常に単純で構成要素が構成可能である必要がない限り、私はこのアプローチを好む。

+0

Androidのライフサイクルが「通常の」デザインを実装する能力を大幅に制限していると感じ始めています。そして、私は最終的に値/タイプ(設定はインタフェースに基づいています)を使用してライブラリに最終的に到達する設定オブジェクトを提供することが手動で注入依存性であると考えました(http://en.wikipedia.org/wiki/Dependency_injection#Manually_injected_dependency)。これにより、ユーザーの興味深い設定オプションのためにオンザフライで設定を変更することもできます。 –

関連する問題