web-dev-qa-db-ja.com

MVCのコンポーネントの識別に関する質問

私は現在、node.js、Express、mustache、MySQLでクライアントサーバーアプリケーションを開発しています。ただし、この質問はほとんど言語やフレームワークに依存しないはずだと思います。

実際のMVCアプリケーションを実行するのはこれが初めてであり、各コンポーネントの意味を正確に判断するのに苦労しています。 (私は以前にMVCと呼ばれる可能性のあるWebアプリケーションを作成したことがありますが、自信を持ってそれらをそのように参照することはありません)

アプリケーション全体を結び付けるserver.jsがあります。他のすべてのコンポーネント(データベース接続、および「モデル」と「ビュー」であると私が考えるものを含む)の初期化を行い、HTTP要求を受信し、使用する「ビュー」を決定します。

これは、私のserver.jsファイルがコントローラーであることを意味しますか?それとも、そこに属していないコードを混合していますか? server.jsファイルをどのコンポーネントに分割する必要がありますか?

Server.jsファイルにあるコードのいくつかの例:

var connection = mysql.createConnection({
    Host : 'localhost',
    user : 'root',
    password : 'sqlrevenge',
    database : 'blog'
});

//...

app.get("/login", function (req, res) { //Function handles a GET request for login forms
    if (process.env.NODE_ENV == 'DEVELOPMENT') {
        mu.clearCache();
    }

    session.session_from_request(connection, req, function (err, session) {
        if (err) {
            console.log('index.js session error', err);
            session = null;
        }

        login_view.html(res, user_model, post_model, session, mu); //I named my view functions "html" for the case I might want to add other output types (such as a JSON API), or should I opt for completely separate views then?
    });
});

session.jsという名前の別のファイルがあります。 cookiesオブジェクトを受け取り、保存されたデータを読み取って、それが有効なユーザーセッションであるかどうかを判断します。また、Cookieの値を変更するloginという名前の関数も含まれています。

  • まず、ユーザー入力を処理してモデルにデータを提供するので、コントローラーの一部になると思いました。
  • それから、アプリケーションデータ/データベースを扱い、提供するデータがビューで使用されるので、モデルかもしれないと思いました。
  • さて、データを出力するので、Viewと見なすことができるかどうかさえ疑問に思っています(Cookieは出力されるHTTPヘッダーの一部です)
3
luiscubal

さて、MVCの背後にある詳細を覚える最も確実な方法は、MVCの曲を学ぶことです。

http://www.youtube.com/watch?v=YYvOGPMLVDo

別の簡単なアプローチは次のとおりです。

  • あなたがそれを見ることができるならば、それはビューの一部です。
  • ビジネスロジックを実装する場合、それはモデルです。
  • UIのジェスチャまたはアクションを、モデルに送信される集合演算に変換する場合、それはコントローラーの一部です。

このページの説明も気に入っています。

http://c2.com/cgi/wiki?ModelViewController

1
DeveloperDon

制御ロジックやCookieやセッションなどの下位レベルの懸念からビューをクリーンに保つことは、間違いなくベストプラクティスと見なされます。通常、これらの懸念事項は、ヘルパーメソッドまたはサービスを呼び出すコントローラーによって処理され、ビューに渡される論理フロー(セッション)またはリターンビューモデル(ASP.Net MVC)またはインスタンス変数(Rails)を決定します。これらのサービスまたはセッションへの繰り返しの呼び出しは、呼び出しの前に暗黙的に呼び出されるフィルター(RailsおよびASP.Netのアクションフィルター)のbefore_filter)の概念を使用することでさらに減らすことができます。コントローラ。

したがって、これらのタイプの懸念事項は、ビューよりもコントローラーに密接に関連しており、ヘルパーまたはサービスを使用することで、コントローラーから繰り返しコードを取り除くことができます。

0
Turnkey