[解決済み] WindowsフォームでMVCを実装する
質問
Windows FormsでMVCパターンを完全に実装するための良い例はどこにありますか?
私はさまざまなサイトで多くのチュートリアルやコード例を見つけました(例えば。 コードプロジェクト や .NetHeaven など) がありますが、多くは MVC よりも observer パターンの方が代表的です。私が開発したいアプリケーションは学校のプロジェクト用なので、次のようなフレームワークを使用することに抵抗があります。 PureMVC や MVC# .
どのように解決するのですか?
私は、アプリケーションは互いに非常に異なっており、アプリケーションがどのように書かれるべきかについての我々の理解はまだ非常に限られているという見解を持っています。 私が携わってきた過去の Windows Forms アプリケーションは、それぞれ非常に異なっていました。私が見てきたデザインの違いのいくつかは、次のとおりです (ほとんどの組み合わせを含みます)。
- データベースと直接対話する (2 階建て)
- 与えられたアプリケーションのために書かれたバックエンドを使用する (3層)
- 多くのアプリケーションで使用するために書かれ、アプリケーションのために変更することができないWebサービスのセットを使用します。(サービス指向アーキテクチャ)
- 更新が行われるのは CRUD 操作で行われます。
- で行われている更新は コマンドパターン (バックエンドサーバへのコマンド送信)
- 多くの データバインディング / データバインディングの使用なし
- ほとんどのデータは、標準のグリッドコントロールでうまく動作する "テーブルのような"(例:請求書)である/ UIデータのほとんどのためのカスタムコントロールが必要です。
- 一人の開発者 / 10人または20人の開発者チーム (UIのみ)
- モックなどによるユニットテストが多い / ユニットテストがない
したがって、常にうまくフィットするMVC(またはMVP)の実装を1つ作ることは不可能だと思うのです。
私が見た中で最高の投稿は、本当に を説明する MVCと なぜ は、MVCシステムがそのように構築されているのか、それは Jeremy D Miller 氏による "Build Your Own CAB" シリーズです。 . このシリーズに取り組んだ後は、自分の選択肢をよりよく理解できるようになるはずです。 Microsoft のスマート クライアント ガイダンス (CAB / Microsoft Composite Application Block) も検討すべきです。これは少し複雑ですが、うまく適合するアプリケーションではうまく機能します。
を選択する WinformsプロジェクトでのMVC/MVPの実装 は、読む価値のある概観を与えてくれます。多くの人が PureMVC . 私は使ったことがありませんが、次にMVCフレームワークが必要になったら見てみようと思います。
" 最初にプレゼンター は、MVP (Model View Presenter) デザインパターンと テスト駆動開発 . これは、顧客の言語でテストを書くことから始めることができます。例えば
"「保存」ボタンをクリックすると ファイルが保存され 未保存ファイルの警告が消えるはずです。 消えます。"
Presenter Firstの使用経験はありませんが、非常に期待できそうなので、機会があれば試してみたいと思います。
Stack Overflow の他の質問も見てみるといいかもしれません。 はこちらです。 と はこちら .
もし、あなたが WPF を使おうと思っているのなら モデル・ビュー・ビューモデル(MVVM) パターンを見てください。とても良いビデオがありますので、ご覧になってみてください。 Jason Dolinger、モデル-ビュー-ビューモデルについて .
WinformsのMVVM(モデル・ビュー・ビューモデル)デザインパターン は、必要に応じて WPF への変換を容易にする別の選択肢を提供します。 マジカル・トレバー は Windows Forms 用のもうひとつの MVVM サンプルで、プロパティ名に基づく自動バインディングも含まれています。
また、自分自身に問いかけてみてください なぜ を考えてみてください。
- できるだけ多くのコードをユニットテストできるようにしたいですか?
- できるだけ多くのコードを再利用できるようにしたいですか?
- コードベースをわかりやすくしようとしていますか?
- その他、あるプロジェクトで有効な 101 の理由があります。
をはっきりさせたら の目標 を明確にすれば、1つの実装を選択することが容易になります。
関連
-
[解決済み] NetFx45WebLinkとNetFx45RedistLinkの違いは何ですか?
-
[解決済み] VB.NETで線を引く方法
-
[解決済み] MVPとMVC、その違いは何ですか?
-
[解決済み] IDisposable インターフェースの正しい使用法
-
[解決済み] INotifyPropertyChangedの実装 - より良い方法は存在するか?
-
[解決済み] .Any() vs .Count() > 0のどちらのメソッドがより良いパフォーマンスを発揮しますか?
-
[解決済み] Windowsフォームアプリケーションで、アプリケーションの設定を保存するにはどうすればよいですか?
-
[解決済み] モデルデータや振る舞いをどこに置くか?[tl; dr; サービスを利用する]
-
[解決済み】djangoのビジネスロジックとデータアクセスの分離
-
[解決済み】Windows Formsアプリケーションにキーボードショートカットを実装する最良の方法とは?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】WCFとは何か、何ができるのか?
-
[解決済み] CLSID {XXXX} を持つコンポーネントの COM クラスファクトリの取得は、次のエラーにより失敗しました: 80040154。
-
[解決済み] アセンブリから型を読み込めなかったエラー
-
[解決済み] app.configのマッピングがないアセンブリのapp.configの再マッピングを考慮する。
-
[解決済み] AndroidでWCFサービスを利用する方法
-
[解決済み] 権限 '*' を持つ SSL/TLS の安全なチャネルを確立できませんでした。
-
[解決済み] Moq Callbackについて教えてください。
-
[解決済み] このコンピュータには、.NET Framework 4.6またはそれ以降の更新プログラムがすでにインストールされています。
-
[解決済み] Visual Studioのコンパイルエラー "mismatch between processor architecture "を修正するにはどうしたらいいですか?
-
[解決済み] WindowsフォームのUIデザインパターン(WPFのMVVMのようなもの)