私は単純なボットの作成を計画していますが、一度やり直したり、将来複雑になることは望ましくありません。私のアプローチが将来問題を引き起こすかどうかは私がここで思っています。そして、より良い解決策/アプローチがあれば。モジュラー能力を追加するための方法としての継承
私は何を計画しています:
- は、ユーザの入力
- を読み込み
Communicator
クラスがメッセージを受信し、メッセージ - 継承に返信するための基本的な方法を持っている
Ability
クラスを持っているがありますそのAbility
クラスと他のすべての能力クラス - すべての
Ability
クラスをメインの配列/リストに格納するクラス Communicator
がメッセージを受け取ると、それはCommunicator
クラスのメソッドを呼び出すことによって、そのリスト内のすべてのクラスとそのコマンドが返答用であったクラス(メッセージを送り返す)に送信されます。
例:
- 能力を継承するクラス:
Greet
とBackflip
- ユーザ入力:は
- "バク転がない" クラスが挨拶し、バックフリップに送られる "バク転を行います" 。
- クラスの両方が文字列を処理
- クラスのバックフリップは、バク転のコマンドを検出し、「バックフリップ」
どれだけ解決スケールのこの種のことが可能で応答?また、主要目標の1つは、他の人が自分の能力を実装してプログラムに含めることを容易にすることです(Hubotと同様)。
「能力」を動詞または句に関連付ける場合は、各特定の動詞/句を扱うことができる「能力」オブジェクトを格納している辞書などがあると考えるかもしれません。また、拡張性のために、 'Ability'オブジェクトのリストをハードコードするのではなく、実行時にそれらを設定するメカニズムを持っている方がいいでしょう。あなたの' Communicator 'オブジェクトに触れることなく、 'クラス。 –
ここではどのような自動メカニズムを使用することをお勧めしますか? – Shard
最低限、 'Communicator'の制御の反転を使用して、' Ability'実装を認識しないようにしてください。あなたのプログラムはそれらをコードで設定します。それでもハードコーディングされているにもかかわらず、あなたはそのように疎結合を達成しています。もっと動的にする必要がある場合は、実行時に.configファイルを使ってそれらを決定するかもしれません。または、プラグインパターンの実装のいくつかの並べ替えを介して。しかし、主な考え方は、「コミュニケータ」はどの「クラス」クラスが使用されるのか分からないということです。それは他の場所であなたのプログラムによって伝えられます。 –