10

MVC の仕組みについて少し混乱しており、基本的な例しか見つかりません。

一種のウィジェットベースのデザインを作りたいです。ページに移動するさまざまなウィジェットを選択できます。各ウィジェットはそれ自体を担当する必要があります-コントローラーとビューが必要です。しかし、メインページはどうですか?突然、たくさんのコントローラが配置されたページができました!

やるべきことは明らかですが、何らかの方法でコントローラーをビューに埋め込むことです...This is my widget {SomeWidget}しかし、「MVCパラダイムを破る」と読んだことがあります。

一部のウィジェットは別の URL に POST する必要があり (検索ボックスから結果ページに移動するなど)、一部のウィジェットは同じ URL に POST する必要があります (記事にコメントを追加すると記事に戻るなど)。

さらに、ユーザーはウィジェットの周りの HTML を編集できる必要があります。たとえば、右側に検索ボックスが必要な場合は、入力することができます<div style="float: right;">{SearchController}</div>(私のパラダイムブレイクの世界では)。

4

7 に答える 7

2

@Benoît のコメントに追加するには:

Symfony フレームワークはこれをコンポーネントで処理します。各コンポーネントは、別のビューに埋め込むことができる自己完結型の MVC インスタンスです。通常の MVC インスタンス (モジュール/アクションのペア) のように、Web 要求に直接応答するようにインスタンス化することはできません。別の MVC ビューにのみ埋め込むことができます。

補足として: Symfony はプラグインを独自の完全な MVC インスタンスとして扱い、独自のスキーマ、モデル、コントローラー、構成ファイル、ビューなどを備えています。

あなたの場合、各コンポーネントは独自の MVC インスタンスになり、アプリはこれらのコンポーネントをつなぎ合わせます。各コンポーネントは、フォームの送信にどのように応答するかを担当します。

MVC は、1 つのビューと 1 つのコントローラーがあるという意味ではありません。これは、アプリのロジックがモデルに格納され、コントローラーが物事をつなぎ合わせ、ビューが表示を構築することを意味します。これは、ロジックとプレゼンテーションの形式的かつ論理的な分離です。

于 2008-11-03T18:13:20.937 に答える
2

私は Web プログラミングが得意ではありませんが、あなたが説明した例から、ページ全体に 1 つのモデル、1 つのビュー、1 つのコントローラーが必要だと思います。ビュー自体には、受信したメッセージをディスパッチするページ内のすべてのウィジェットのビューが含まれている必要があります (ページ コントローラーも同様です)。

概念的には、下位レベルの MVC (ウィジェット用) と上位レベルの MVC (ページ用) があります。そして、MVC パラダイムが壊れることはありません。ウィジェットの周囲の HTML を編集できるようになりました。これにより、ページ モデルが変更されます (ウィジェット モデルではありません)。

お役に立てれば !

于 2008-11-03T17:56:12.000 に答える
1

ASP.NET MVC でのウィジェットの作成に関して私が見つけた最良の情報は、Steve Sanderson のブログにあります。彼は、サブコントローラーとは異なる手法である部分リクエストの概念について説明しています。

http://blog.codeville.net/2008/10/14/partial-requests-in-aspnet-mvc/

部分リクエストは簡単です 部分ビューについて聞いたことがあるので、部分リクエストはどうですか? 任意の MVC リクエスト内で、内部部分リクエストのコレクションを設定できます。各部分リクエストは独自の内部部分リクエストなどを設定できます。各部分リクエストは、プレーンな通常のコントローラーのいずれかでプレーンな古いアクション メソッドをレンダリングし、それぞれが独立したウィジェットを生成できます。これらを「コントローラー」ではなく部分的な「リクエスト」と呼んでいるのは、ルーティング システムとコントローラー ファクトリと互換性のある適切な MVC リクエスト処理パイプラインを実行するためです。それでも、サブコントローラーと同様に、すべてのコントロールはコントローラーに残り、ビューは無視される可能性があります。

于 2009-02-19T02:58:48.493 に答える
1

私が MVC で見つけた最も優れた、短くて簡単な本の 1 つは、先週の PDC 2008 expo で配られた次の本です。

http://www.apress.com/book/view/1430216468

MVC の概念をカバーするだけでなく、Ruby on Rails や MVP 方法論などの他の概念との比較も行います。

さらに、MVC が存在するすべての理由について、懸念事項の分離と、それが UI レベルだけでなく、ビジネス オブジェクトと DAL の実際のレイヤーまたは IoC 構造にある必要がある理由を説明します。

わずか 110 ページほどでベスト プラクティスが説明されているので、この本を強くお勧めします。

いいえ、私は FirstPress で働いているわけでも、FirstPress とはまったく関係ありません。私はその本が好きで、最終的に私が同意する人がいます。

于 2008-11-03T19:38:54.227 に答える
0

MVC テーマには多くのバリエーションがあり、特定のシステムの設計に関して結論を​​出す前に考慮すべきことがたくさんあります。最新の人気のある Web ベースのシステムのほとんどは、IoCを指針としています。通常、ある種のフレームワーク コンポーネントは、ある種の構成を使用して適切なテンプレートをビューとして呼び出し、モデルとして適切なオブジェクト階層と結合するコントローラーです。これらのシステムのほとんどには、テンプレートで使用される拡張可能な GUI ウィジェット ライブラリが含まれています。独自のウィジェットを追加できますが、ウィジェットを特定のオブジェクト階層にハード コードすることはベスト プラクティスではありません。その IoC リンクは、そのハードコーディングを回避する方法について何らかの方向性を示すはずのコンポーネントとサービスについても説明しています。

于 2008-11-03T18:14:03.120 に答える
0

JarrettV と jcoby の回答が最も近いと思います。

サブコントローラーを Hierarchical MCV ( HMVC ) として知るようになりました。アイデアは、コントローラーからテンプレートにデータを「プッシュ」するのではなく、親ビュー テンプレートからコンテンツ (サブコントローラーによって取り込まれたビュー) を「プル」することです。したがって、コントローラーとビューの両方を編集してウィジェットを追加する必要はなく、ビューからウィジェットを呼び出すだけです。PHP フレームワークの CodeIgniter (Modular Extensions) と Kohana (Dispatch、および Component) には、これを実現するためのライブラリがあります。

于 2009-02-19T03:21:19.220 に答える
0

ASP.NET MVC は、ウィジェット ダッシュボードのマッシュアップ タイプのページに適しています。

PDC 2008のこのセッションをご覧ください。

おそらく、Ajax ヘルパーを使用して、各ウィジェット内の島々のデータを更新することをお勧めします。以下は、どのページにも電卓を配置し、コードを独立したままにする方法のスニペットです。

スニペットを表示:

<script type="text/javascript">
    function OnFailure(error) {
        alert("We have encounterd an error " + error);
    }
</script>
<% using (Ajax.BeginForm("Add", new AjaxOptions{UpdateTargetId="sum", OnFailure="OnFailure"})){ %>
    <%= Html.TextBox("x") %>&nbsp;+&nbsp;
    <%= Html.TextBox("y") %>&nbsp;=&nbsp;
    <span id="sum">?</span>
    <input type="submit" value="AddEm" />
<% } %>

コントローラー スニペット:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Add(string x, string y)
{
    int sum = int.Parse(x) + int.Parse(y);       
    return Content(sum.ToString());
}
于 2008-11-06T05:57:15.460 に答える