タグ付けされた質問 「mvc」

MVC(Model-View-Controller)は、関心事の分離を強制するソフトウェアアーキテクチャパターンです。

11
MVCの「C」は本当に必要ですか?
Model-View-Controllerパターンでのモデルとビューの役割は理解していますが、コントローラーが必要な理由を理解するのに苦労しています。 MVCアプローチを使用してチェスプログラムを作成していると仮定しましょう。ゲームの状態がモデルになり、GUIがビューになります。この場合、コントローラーは正確に何ですか? これは、たとえばタイルをクリックしたときに呼び出されるすべての関数を備えた単なる別のクラスですか?ビュー自体でモデルのすべてのロジックを実行しないのはなぜですか?

4
GUIプログラミングでスレッドの安全性を確保するのはなぜ呼び出し側の責任ですか?
多くの場所で、UIコンポーネントを更新するときにUIスレッド上にいること(具体的には、Javaスイングでは、イベントディスパッチスレッド上にいることを確認することは呼び出し側の責任であることは、標準的な知恵1です) 。 これはなぜですか?イベントディスパッチスレッドは、MVC / MVP / MVVMのビューの問題です。ビュー以外の場所で処理するには、ビューの実装と、そのビューの実装のスレッドモデルとの間に密結合を作成します。 具体的には、Swingを使用するMVC設計のアプリケーションがあるとします。呼び出し元がイベントディスパッチスレッドのコンポーネントの更新を担当している場合、JavaFX実装のSwing View実装を交換しようとすると、代わりにJavaFXアプリケーションスレッドを使用するようにすべてのプレゼンター/コントローラーコードを変更する必要があります。 だから、私は2つの質問があると思う: UIコンポーネントのスレッドの安全性を確保するのは、呼び出し側の責任なのはなぜですか?上記の推論の欠陥はどこにありますか? これらのスレッド安全性の懸念を疎結合しながら、適切にスレッドセーフであるようにアプリケーションを設計するにはどうすればよいですか? MCVE Javaコードを追加して、「呼び出し側の責任」が意味することを説明します(ここには、私がやっていませんが、できる限り最小限にするために他の良い習慣があります)。 責任者である発信者: public class Presenter { private final View; void updateViewWithNewData(final Data data) { EventQueue.invokeLater(new Runnable() { public void run() { view.setData(data); } }); } } public class View { void setData(Data data) { component.setText(data.getMessage()); } } …

6
iOSで大きくて不器用なUITableViewControllerを避ける方法は?
iOSでMVCパターンを実装するときに問題があります。インターネットを検索しましたが、この問題の良い解決策を見つけられないようです。 多くのUITableViewController実装はかなり大きいようです。私が見てきた例のほとんどは、することができますUITableViewController実装<UITableViewDelegate>と<UITableViewDataSource>。これらの実装は、大きくなっている大きな理由UITableViewControllerです。一つの解決策は、その実装別々のクラスを作成することです<UITableViewDelegate>と<UITableViewDataSource>。もちろん、これらのクラスにはを参照する必要がありUITableViewControllerます。このソリューションを使用する上で欠点はありますか?一般に、デリゲートパターンを使用して、他の「ヘルパー」クラスなどに機能を委任する必要があると思います。この問題を解決する確立された方法はありますか? モデルに含まれる機能やビューが多すぎないようにします。これはMVCパターンの基礎の1つであるため、ロジックは実際にはコントローラークラスにあるべきだと思います。しかし、大きな問題は次のとおりです。 MVC実装のコントローラーを、どのように小さな管理可能な部分に分割する必要がありますか?(この場合、iOSのMVCに適用) これを解決するための一般的なパターンがあるかもしれませんが、iOSのソリューションを具体的に探しています。この問題を解決するための良いパターンの例を教えてください。ソリューションが優れている理由を説明してください。

7
なぜ誰もがコントローラーを1つのフォルダーに入れ、ビューを別のフォルダーに入れるのですか?
私は、aspから曲げてmvcフレームワーク、asp.net mvcまたはnancyに移行する準備をしています。どこに行っても、コントローラー/モジュール用のフォルダーとビュー用のフォルダーが表示されます。これは単にタイプごとに物事を片付けるパブロフの反射ですか、それともより深い知恵が働いていますか?一緒に開く可能性のあるファイルを一緒に保存する概念実証プロジェクトが少しありますが、かなり快適です。これらのファイルは相互に呼び出すことも多いため、短く、脆弱性の低い相対リンクで呼び出すことができます。フォルダーパスがURLパスに自動的に対応しなくなったため、このパターンはmvcによってチャレンジされ、asp.net mvcでは、プロジェクトテンプレートとルーティングがviews \ controllers \ schismを強制します。 このMicrosoftページでは、エリアの概念を紹介しています。これは、この人為的な分離が原因で、扱いにくい大型アプリがどのようになるかを認めたものとして読むことができます。 人々は「懸念の分離」に反対しますが、懸念の分離はすでに別々のソースファイルを持つことで達成されています。密結合されたこれらのソースファイルを取得し、フォルダー構造の反対側に送信することから、具体的なゲインはありませんか? 他の誰かがこれと戦っていますか?任意のヒント?
36 mvc  asp.net-mvc 

2
MVCS-モデルビューコントローラーストア
私は最近、iOS開発の学習を開始することを決めました。そのために、iOSプログラミング:The Big Nerd Ranch Guideを読みました。本の中で著者はMVCS-Model-View-Controller-Storeのデザインパターンについて説明しています。基本的な考え方は、多くのアプリケーションがデータの複数の外部ソースを利用するため、コントローラーのリクエストロジックを維持するのが非常に面倒になる可能性があるということです。すべての要求ロジックをコントローラーから別のオブジェクトに移動することを提案します。 要するに本を引用する Model-View-Controller-Storeは要求ロジックを別のオブジェクトに入れ、このオブジェクトをストアと呼びます(図28.4)。ストアオブジェクトを使用すると、冗長なコードが最小限に抑えられ、データをフェッチして保存するコードが簡素化されます。最も重要なことは、外部ソースを処理するためのロジックを、明確で焦点の合った目標を持つ整然としたクラスに移動することです。これにより、コードが理解しやすくなり、保守とデバッグが容易になり、チームの他のプログラマーと共有できます。 そして 非同期ストアの優れた点は、多くのオブジェクトが要求を処理するために多くの作業を行っているにもかかわらず、要求とその応答のフローがコントローラーの1か所にあることです。これにより、読みやすく変更しやすいコードの利点が得られます。 私はこのパターンについてもっと知り、他の人がそれについて何を言わなければならないかを見たいと思っていましたが、オンラインで検索している間、私が見つけることができる唯一の参照はその同じ本に関するものでした(パターンはおそらく他の名前で知られていますか?)。 私にとって著者の論理は理にかなっているようで、通常のMVCパターンの論理的な拡張のように思えますが、おそらく実際にはMVCパターンの経験があまりないためです(iOS開発への進出を除いて)ソートで使用MVVのBACKBONE.JS(、であるあなたがそれMVC検討している場合))。 おそらく、より多くの経験を積んだ人が、MVCSパターンに明らかな欠陥や問題がないかどうかを明らかにすることを望んでいました。

10
ビューとモデルは通信する必要がありますか?
MVCアーキテクチャのウィキペディアページによると、ビューはモデルから通知されることも、モデルの現在の状態についてクエリすることもできます。ただし、スタンフォード大学のiOS 5のPaul Hegartyのコース1、18ページによると、すべてのやり取りはコントローラーを介して行われる必要があります。ヘガティの声明がコースの簡略化を意図したものであるかどうかは私には明らかではありませんが、私は彼がそのようなデザインを意図していると言いたくなります。 これら2つの反対の視点をどのように説明しますか?
33 design  mvc 

7
ビジネスロジックがビューに忍び寄らないようにすることは可能ですか?
私は過去3年間、個人および職場の両方でいくつかのWebアプリケーションプロジェクトを開発してきましたが、少なくとも一部のビジネスロジックがアプリケーションのビューレイヤーで終了する可能性があるかどうかはわかりません。 ほとんどの場合、「ユーザーがオプションxを選択した場合、アプリケーションはユーザーがyの情報を提供できるようにする必要があり、そうでない場合は情報zを提供する必要がある」などの問題があります。または、モデルにいくつかの変更を適用する必要がありますが、ユーザーが明示的に要求するまでコミットしないAJAX操作を実行します。これらは私が遭遇した最も単純な問題の一部であり、ビュー内の複雑なロジックを回避する方法がわかりません。 MVCについて説明した本のほとんどは、通常、サーバー上のデータを更新して表示するCRUD操作など、非常に簡単な例を示していますが、CRUDはほとんどのリッチアプリケーションには当てはまりません。 ビジネスロジックをまったく持たないビューを実現することは可能ですか?

9
MVCを非プログラマーに説明する[非公開]
MVCを非プログラマーに説明する必要があります。つまり、進捗レポートのコンテキストで、他の部門のマネージャーに。私がしていることの1つは、MVC分離に向けてコードベースをリファクタリングすることです。 MVC分離とは何ですか?彼らが尋ねる必要があるのはなぜですか? このようなかなり技術的な答えを読んだ後: 本当にMVCとは何ですか?、私はプログラマーではない人と話をするので、完全に満足しているわけではありません。彼らはうなずくかもしれませんが、おそらくそれが何であり、なぜそれが必要なのか理解できないでしょう。 現実には、「ソフトウェアに変更を加える柔軟性を向上させるために、懸念、義務、機能、クラス、ブロック、タスク、物事の分離」以外のMVCを完全には把握していません。DIやOOのツールや手法などの手法を使用して、データベースをビューから分離し、ビジネスロジックからビューを分離することは、MVC分離と考えています。 たとえば、次に販売や会計のバックグラウンドを持っているプログラマーでない人にMVCを説明するとき、何を伝えますか?
31 mvc 

5
ユーザー権限のチェックはどこで、MVCで誰によって行われますか?
モデルまたはコントローラーでユーザー許可チェックを行う必要がありますか?そして、誰が許可チェック、Userオブジェクト、またはUserManagementヘルパーを処理する必要がありますか? それはどこで起こるべきですか? コントローラーのチェックイン: class MyController { void performSomeAction() { if (user.hasRightPermissions()) { model.someAction(); } } ... コントローラーにチェックがあると、モデルをシンプルなアクションにするのに役立ち、すべてのロジックをコントローラーに保持できます。 モデルのチェックイン: class MyModel { void someAction() { if (user.hasRightPermissions()) { ... } } ... モデルにチェックを入れることにより、モデルを複雑にしますが、コントローラーで想定されていない操作をユーザーが誤って許可しないようにします。 そして誰によって? 場所に落ち着いたら、誰がチェックするべきですか?ユーザー? Class User { bool hasPermissions(int permissionMask) { ... } ... しかし、ユーザーがアクセスできる内容を知ることは、実際にはユーザーの責任ではないので、おそらくヘルパークラスでしょうか? Class UserManagement { bool hasPermissions(User …
26 mvc  permissions 

4
MVCでは、モデルが検証を処理する必要がありますか?
MVCパターンを使用するために開発したWebアプリケーションを再構築しようとしていますが、検証をモデルで処理すべきかどうかはわかりません。たとえば、次のようにモデルの1つを設定しています。 class AM_Products extends AM_Object { public function save( $new_data = array() ) { // Save code } } 最初の質問:では、saveメソッドが$ new_dataの検証関数を呼び出すべきか、データが既に検証されていると仮定するのか疑問に思っていますか? また、検証を提供する場合、データ型を定義するモデルコードの一部は次のようになると考えています。 class AM_Products extends AM_Object { protected function init() // Called by __construct in AM_Object { // This would match up to the database column `age` register_property( 'age', 'Age', …
25 architecture  mvc 

6
APIリクエストはMVCのどこに配置すればよいですか?
MVCパターンを使用してWebアプリケーションを構築しています。この種のアーキテクチャに従うと、データベースとのやり取りに使用されるすべてのメソッドがモデルに実装されていることがわかります。 しかし、Web上で他の人に公開されているサービスを呼び出さなければならない場合はどうなりますか?たとえば、ページのフォロワーをすべて取得するためにFacebook APIにアクセスしたいので、これらのメソッドをどこに配置しますか? このモジュールはプレゼンテーション専用であり、コントローラーを使用してデータを取得することはできませんが、モデルは通常データベースとの対話専用であるため、ビューは明らかに良いアイデアではありません。 それで、それについてのヒントを教えていただけますか?そして、MVCアーキテクチャについて間違いを犯していないかどうか教えてください。
25 mvc  api 

3
コンポーネントエンティティシステムアーキテクチャを使用してアプリケーション(ゲームではない)を構築するのは妥当ですか?
Apple AppStoreやGoogle Playアプリストアなどのアプリケーション(ネイティブまたはWeb)を構築するとき、Model-View-Controllerアーキテクチャを使用することは非常に一般的であることを知っています。 ただし、ゲームエンジンで一般的なComponent-Entity-Systemアーキテクチャを使用してアプリケーションを作成することは合理的ですか?

2
Web開発の代替パターン?(非MVC)[終了]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 4年前に閉鎖されました。 最近、私はMVCとそれがウェブに合わないことに関するいくつかのブログ投稿を読んでいました。RMR Architectureのような代替パターンについて学びました。 MVCのほかに、人々がWebで使用している他のパターンに興味がありますか?また、パターンを実装するフレームワークがある場合は、そのリンクを投稿してください。


5
MVCシステムでは、データベースの永続化コードはどこにあるべきですか?
データベースに情報を保持するための複数の構成を見てきました。一般的に、私の世界では3つのタイプのデザインが一般的です。 コントローラーが永続性を管理します モデルは永続性を管理します サードパーティのライブラリが永続性を管理します。通常、モデルに何らかの種類の注釈が​​必要です。 概念的に、MVCアーキテクチャと最も互換性があり、互換性のある構成はどれか(もしあれば)疑問に思っていますか? (リストにない場合は、回答の一部として簡単な概要/概要を教えてください)
21 mvc 

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.