MVCアーキテクチャでユーザー入力はどこから来ますか?
-
05-07-2019 - |
質問
(モデルにフィードするために)コントローラーがどこからユーザー入力を取得するかを知りたいです。入力メディアはユーザーに強く関連しているため、ビューはユーザーのデータを取得する具体的な方法を認識すべきではありませんか?しかし、どうすればコントローラをビューから分離できますか?目的が示すように、両方を互いに完全に独立させることは可能ですか?
例: ビューに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は、モデルとやり取りするためにそれらを処理し、その場合は後でデータを永続化します。