2016-04-22 3 views
1

私は単純なボットの作成を計画していますが、一度やり直したり、将来複雑になることは望ましくありません。私のアプローチが将来問題を引き起こすかどうかは私がここで思っています。そして、より良い解決策/アプローチがあれば。モジュラー能力を追加するための方法としての継承

私は何を計画しています:

  • は、ユーザの入力
  • を読み込みCommunicatorクラスがメッセージを受信し、メッセージ
  • 継承に返信するための基本的な方法を持っているAbilityクラスを持っているがありますそのAbilityクラスと他のすべての能力クラス
  • すべてのAbilityクラスをメインの配列/リストに格納するクラス
  • Communicatorがメッセージを受け取ると、それはCommunicatorクラスのメソッドを呼び出すことによって、そのリスト内のすべてのクラスとそのコマンドが返答用であったクラス(メッセージを送り返す)に送信されます。

例:

  • 能力を継承するクラス:GreetBackflip
  • ユーザ入力:
  • "バク転がない" クラスが挨拶し、バックフリップに送られる "バク転を行います" 。
  • クラスの両方が文字列を処理
  • クラスのバックフリップは、バク転のコマンドを検出し、「バックフリップ」

どれだけ解決スケールのこの種のことが可能で応答?また、主要目標の1つは、他の人が自分の能力を実装してプログラムに含めることを容易にすることです(Hubotと同様)。

+0

「能力」を動詞または句に関連付ける場合は、各特定の動詞/句を扱うことができる「能力」オブジェクトを格納している辞書などがあると考えるかもしれません。また、拡張性のために、 'Ability'オブジェクトのリストをハードコードするのではなく、実行時にそれらを設定するメカニズムを持っている方がいいでしょう。あなたの' Communicator 'オブジェクトに触れることなく、 'クラス。 –

+0

ここではどのような自動メカニズムを使用することをお勧めしますか? – Shard

+0

最低限、 'Communicator'の制御の反転を使用して、' Ability'実装を認識しないようにしてください。あなたのプログラムはそれらをコードで設定します。それでもハードコーディングされているにもかかわらず、あなたはそのように疎結合を達成しています。もっと動的にする必要がある場合は、実行時に.configファイルを使ってそれらを決定するかもしれません。または、プラグインパターンの実装のいくつかの並べ替えを介して。しかし、主な考え方は、「コミュニケータ」はどの「クラス」クラスが使用されるのか分からないということです。それは他の場所であなたのプログラムによって伝えられます。 –

答えて

1

概念的には、MVCと大きく違いはありません。Abilityがコントローラにうまくマッピングされ、返信がビューにマップされます。 ASP.NET/MVCのようなMVCフレームワークを選ぶことさえできるかもしれません。

MVCの違いは、一般的に、すべてのコントローラにメッセージをブロードキャストして応答できるかどうかを判断するのではなく、特定のコントローラに受信コマンドをルーティングするルーターがあることです。あなたの考えている放送はちょっと残酷に思われます...すべての単一のAbilityが解析して対応することを決めなければならないという点で。これはスケーラビリティの問題をもたらします...特に多くの会話が同時に進行しています。

また、あなたの世界が大きく複雑になれば、複数のAbilitiesが反応するとどうなりますか?

MVCでは、ルータは、コントローラ内の事前登録された、またはより一般的な規則ベースのアクションへの入力パターンのマッピングを行います。ルータには、どのコントローラを呼び出すかを決定するヒューリスティックス(しばしば最初に見つかったもの)があります。フレームワークは通常、ルータをカスタマイズするあらゆる種類の方法を持っています。

これは単なる楽しいことであり、課税されることはあまりありませんが、汚い仕事をするためのMVCフレームワークを調査することは十分に役に立ちます。

+0

私は私の質問を編集してこのビットを追加しました:また、主要な目標の1つは、能力を評価し、それらをプログラムに含める。あなたはまだMVCをお勧めしますか? – Shard

+0

少なくともASP.NET MVCでは、新しいコントローラを作成するのはログから落ちるのが簡単です...そして、私はログから落ちました。コミュニティにはたくさんのサポートがあります。私はチュートリアルをチェックすることをお勧めします。 http://asp.netを見ると、面白い情報がたくさんあります。 – Clay

+0

私はWebフレームワークと言いますから少し気になります。私はHubotのようなスタンドアローンヘルパーボットを考えています。 – Shard

関連する問題