質問

(モデルにフィードするために)コントローラーがどこからユーザー入力を取得するかを知りたいです。入力メディアはユーザーに強く関連しているため、ビューはユーザーのデータを取得する具体的な方法を認識すべきではありませんか?しかし、どうすればコントローラをビューから分離できますか?目的が示すように、両方を互いに完全に独立させることは可能ですか?

例: ビューにcursesライブラリを使用するアプリケーションがある場合、それはターミナルからのみアクセス可能であることを意味します。 cursesメソッドを使用してコントローラーのユーザーデータを読み取ると、カプセル化が解除されますが、ビューでメソッドを呼び出すと、モデルの表示とは無関係になります。

役に立ちましたか?

解決

ViewとControllerが Observerパターンを介して通信することを検討してください。コントローラは、自身をビューにオブザーバとして登録します。ユーザーがビューにデータを入力してEnterキーを押すと、ビューはデータを解釈し、利用可能なデータがあることをオブザーバーに通知します。コントローラーは、パブリックメソッドを介してビューからデータを取得できます。

他のヒント

MVCでは、コントローラーはビューからユーザー入力を取得します。

ビューが実際にデータを入力することに本当に関係があるとは思わない。ユーザーがコントローラーと直接通信しているように見える場合、MVCを視覚化する方がはるかに簡単です。コントローラーはユーザーからデータを受け取り、ビューを送り返します。多くのシステムでは、ビューエンジンはそれ自体を更新する方法が限られています(つまり、テキスト入力は、コントローラーに送信される前に入力された内容を表示します)。ただし、MVCタイプのアーキテクチャでは、同じデータを処理できるビューであれば、ビューを他のビューに置き換えることができます。

たとえば。ユーザー名の入力は、文字列の入力をサポートする任意のシステムで実行できます。コントローラは文字列を受け入れるため、Webアプリケーション、ターミナルアプリケーション、またはGUIアプリケーションで使用できます。

ビューには、ユーザー入力を送信するためのコントローラーのコールバックが必要だと思います。 Webアーキテクチャでは、httpリクエストを介してユーザー入力をサーバーに送り返す機能によりコールバックが提供されます。

あなたの場合、ncurseフロントには、おそらくユーザー入力を送り返すためのコントローラーコンポーネントへの何らかのコールバックメソッドが必要です。

まあ、

より具体的になるよう努めます。 pplに曖昧な/抽象的な回答を与えても、それが見えても、主題をマスターしなくても、助けにはなりません。

MVC-<!> gt;モデルビューコントロール

MVCには多くの実装がありますが、あなたの場合はわかりませんが、1つあげます。

最も一般的なMVC実装はこのように動作します。

view <!> lt;-<!> gt;コントローラー<!> lt;-<!> gt;モデル

Webシナリオの場合..

ビューはHTMLページであり、データ入力はフォームで行われます。

<form action=/home/createuser method=post>
...code goes here...
</form>

Homeはコントローラー(homeという名前のクラス)で、createuserはhomeのメソッドです。

public class Home extends Controller {

   public void createUser(Userform f){
      ...create user...
   }
}

このフォームは、データをパラメーターとしてメソッドに送信します。 Createuserは、モデルとやり取りするためにそれらを処理し、その場合は後でデータを永続化します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top