0

他の多くの人と同じように、MVC パターンの理解に問題があります。より正確に言うと、Grail Web アプリについて話しましょう。私の理解では、モデルはサービスとドメイン クラスです。コントローラーの典型的な使用法は次のようになります (実際には、この特定の使用法では、コントローラーから Person.get(id) を直接呼び出すことができますが、サービスを介して呼び出すとします):

def getPerson(String id){
    Person person = peopleService.get(id);
    render(view: "person", model: person)
}

この場合、サービス メソッドがドメイン オブジェクトを返していることが判明しました。これは、モデルの一部です。ただし、サービス メソッドがドメイン オブジェクトを変更しない、または変更するが、ブール値などを返す場合があります。

def savePerson(Person p){
    boolean saved = peopleService.save(p);
    render(view: "actionresult", model: saved)
}

この場合、ブール値はモデルの一部ではありませんが、レンダリング メソッドでモデルとして名前が付けられます。

そこで、私には次の 3 つの仮説があります。

  • 2 つのモデルがあります。ビジネス ロジックを担当するアプリケーション層モデルと、ビューのレンダリングに使用されるデータです。
  • MVC は完全にプレゼンテーション レイヤー パターンであり、ビジネス ロジック レイヤーとは何の関係もありません。この場合、モデルはビューによって表示される単なるデータです。
  • モデルはサービス レイヤーとドメイン クラスであり、コントローラーはサービス メソッド呼び出しを介してモデルの更新をトリガーし、ビューのレンダリングに使用されるデータは何らかの形でモデルの状態を表す必要があるため、レンダリング関数でモデルとも呼ばれます。

あなたはそれについてどう思いますか?

4

2 に答える 2

1

あなたの仮説は正しいと思います-MVCは、さまざまなコンテキストでさまざまなことを意味します。MVC パターンに基づいて MVC フレームワークまたはアプリケーションを作成するときは、そのコンテキストで想定される「モデル」も定義します。たとえば、複雑なドメイン モデルの場合もあれば、単なるデータ アクセス レイヤーの場合もあります。

一般的な MVC フレームワークを使用して構築された複雑な Web アプリケーションのコンテキストでは、「モデル」は必ずしもビジネス ロジックのモデルと同一ではないと言っても過言ではありません。Web ショップの「製品」の基礎となるビジネス モデルには、たとえば、Web ショップ インターフェイスで決して公開したくないサプライヤーや購入価格に関する情報が含まれる場合があります。

したがって、その場合、すべてではなく一部のプロパティを MVC フレームワークに公開する別の「モデル」を使用することをお勧めします。

これを明示的に考えるMVVMという概念があります。簡単に言えば、「ビューモデル」は、特定のビューに表示するための「適切な」モデルのマッピングです。

于 2013-11-12T23:15:50.747 に答える