2011-12-19 20 views
1

私のプログラムのコントローラコンポーネントの戦略パターンを実装しようとしています。コントローラで戦略パターンを実装する方法

空のキャンバスにアイテムを作成できるCreateViewStateなどのビューステートが異なるため、createInput(),addToModel()およびstuffのようなメソッドが必要です。

私が持っている別の状態は、以前に追加したアイテムを編集できるEditViewStateです。入力を選択し、その色やサイズなどを変更します。だから、selectInputAtLocation()、またはchangeColor(java.awt.Color color)またはchangeSize(int size)あるコントローラが必要な方法...

私はそれについて移動の方法は、私がrepOK(のような一般的なメソッドを持ってIControllerインターフェースを作成している)、toString()メソッドと、よりthisWasTheLocation(のようなカップルint x、int y)ビューが画面上で押された位置をコントローラに渡すために静的に呼び出されます。

しかし、彼らの特定の仕事をするために私は彼らが持っている共通の方法はありません。私はdoStuff(Item item)メソッドをインターフェイスに配置し、そこにコントローラロジックを入れて、クライアントコードがコード全体でIController.getInstance().doStuff(item)を使用できるようにすることを考えていました。私が予測できる限り、特定のメソッドを呼び出すとコントローラーをキャストする必要があります(editControllerの場合はchangeColor()、createControllerの場合はcreateInput())。

インターフェイスでdoStuff()メソッドを作成した場合は、特にeditController(これは7-8以上のメソッドがあります)について多くのifステートメントを実装する必要があります。

このシステム全体をどのように設計する必要がありますか?

P.S:ControllersしたがってgetInstance()

+0

私はトンに開始あなたの質問にもう一度答えてください。残念ながら、私はあなたのコースが現在あなたに教えようとしていること、そしてあなたがどれほど遠くにあるのかを知らないので、あまりにも多くの前提があります。もっと具体的な質問を投稿できるのであれば、私はさらに助けてくれるかもしれません。 'if'文がうまくいけば何も問題はありません。投稿する作業コードがある場合は、改善を提案するのに役立ちます。 – Brad

答えて

0

シングルトンですあなたの説明から言うのは難しいですが、あなたがあなた自身のMVCフレームワークを書いているように聞こえます。なぜSpring、Strutsなどを使用しないのですか?ドメインモデルがどれだけ複雑かは分かりません。

簡単に質問ありこのシステム全体をどのように設計すればよいですか?がおそらく最も多くの既存のJava MVCのいずれかを使用することにより応答されるが

グッドデザインは、あなたのコントローラから出て、サービス層に任意のトリッキーなビジネスロジック(doStuff())を移動するために、あなたを奨励するフレームワーク。あなたのコードは、テストしやすく、あなたのコントローラに結びついていません。

あなたは、コントローラのニーズは、あなたがどこに複雑さを追加しているように、これは私に聞こえるselectInputAtLocation()、またはchangeColor(をjava.awt.Color色)またはchangeSize(int型のサイズ)...あるだから、方法を述べます必要ない。

例としてStrutsを使用すると、HTTPフォームPOSTにはユーザーが編集したデータが含まれ、コントローラではActionFormのBeanで利用できます。次に、このユーザーデータを検証し、サニタイズしてから、どのサービスメソッドを呼び出すかを決定します(これは、お望みの戦略パターンと同様です)。あなたは1本

public class ThingDispatchAction extends DispatchActionSupport { 

    public ActionForward read(ActionMapping mapping, ActionForm form, HttpServletRequest req, HttpServletResponse resp) 
     // call service layer to read a Thing.java 
    } 

    public ActionForward edit(ActionMapping mapping, ActionForm form, HttpServletRequest req, HttpServletResponse resp) 
     // call service layer to update a Thing.java 
    } 

    public ActionForward create(ActionMapping mapping, ActionForm form, HttpServletRequest req, HttpServletResponse resp) 
     // call service layer to create a new Thing.java 
    } 

    public ActionForward save(ActionMapping mapping, ActionForm form, HttpServletRequest req, HttpServletResponse resp) 
     // call service layer to persist a Thing.java 
    } 

    public ActionForward delete(ActionMapping mapping, ActionForm form, HttpServletRequest req, HttpServletResponse resp) 
     // call service layer to delete a Thing.java 
    } 
} 

、または各における唯一の方法があるようにあなたは、各ドメインオブジェクトに対して複数のコントローラクラスを持つことができるように、ドメインモデルクラスごとに1つのControllerクラスを持っているかもしれないあなたのContollerデザインについて

など

public class ThingReadAction extends ActionSupport { 

    public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest req, HttpServletResponse resp) 
     // call service layer to read a Thing.java 
    } 
} 

public class ThingDeleteAction extends ActionSupport { 

    public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest req, HttpServletResponse resp) 
     // call service layer to delete a Thing.java 
    } 
} 

etc ... 

以下選ばれたMVCフレームワークは、メソッドが呼び出されるかを決定するための構成を持つことになりますようなクラス、

+0

これはクラスの宿題なので、SpringやStrutsなどのフレームワークは使用していません。私がしようとしているのは、MVCシステムのコントローラ用の戦略パターンを実装することです。 – eytanfb

+0

「宿題」を含むようにタグを更新して、人々があなたの状況を認識するようにする必要があります。それ以外の場合は、「現実世界」の問題があるとみなします。 – Brad

+0

申し訳ありません、ここは新しいです – eytanfb

関連する問題