WindowsフォームでMVCパターンを完全に実装する良い例はどこにありますか?WindowsフォームでMVCを実装する
さまざまなサイト(例:The Code Projectと.NetHeaven)で多くのチュートリアルとコード例が見つかりましたが、多くはMVCよりもオブザーバーパターンのほうが代表的です。私が開発したいアプリケーションは学校プロジェクトのため、PureMVCやMVC#のようなフレームワークを使用することには消極的です。
WindowsフォームでMVCパターンを完全に実装する良い例はどこにありますか?WindowsフォームでMVCを実装する
さまざまなサイト(例:The Code Projectと.NetHeaven)で多くのチュートリアルとコード例が見つかりましたが、多くはMVCよりもオブザーバーパターンのほうが代表的です。私が開発したいアプリケーションは学校プロジェクトのため、PureMVCやMVC#のようなフレームワークを使用することには消極的です。
私は、アプリケーションが互いに非常に異なっており、アプリケーションの記述方法についての理解はまだ非常に限られていると考えています。私が取り組んできた過去のWindows Formsアプリケーションは、互いに非常に異なっています。 (ほとんどの組み合わせを含む)されて、私が見てきたデザイン違いの一部:
ので、私はそれが1つの実装を作成することはできないと思いますがテストしませんいつもうまく収まるMVC(またはMVP)の
私は MVCと MVCシステムは、それがある方法を構築している理由を説明する本当に見た中で最高のポストは、"Build Your Own CAB" series by Jeremy D Millerです。あなたはあなたのオプションをもっとよく理解することができるはずですが、それを作業した後。 Microsoft's Smart Client Guidance (CAB/Microsoft Composite Application Block)も考慮する必要があります。それはちょっと複雑ですが、うまくフィットしているアプリケーションではうまく動作します。
MVC/MVP Implementation for a Winforms Projectを選択すると、読む価値があります。 PureMVCのような多くの人。私はそれを一度も使ったことはありませんが、次にMVCフレームワークが必要になったときに見ていきます。
「Presenter First」は、MVP(Model View Presenter)デザインパターンとtest-driven developmentのアイデアを組み合わせたソフトウェア開発アプローチです。それはあなたが顧客の言語でテストを書くことから始めることができます。たとえば:
「。私は、ファイルを保存する必要があると 保存されていないファイルの警告が 消えるはず その後、ボタンを 『保存』をクリックし、」
は、私が「プレゼンターファーストを使用しての経験がありません私はチャンスを得るとき、それは非常に有望に見えるように、」私は、それを試してみるだろう。
他のスタック オーバーフローの質問にでhereとhereをしているあなたが見たい場合があります。
WPFのいずれかを使用することを考えている場合は、Model-View ViewModel (MVVM)パターンをご覧ください。ここで見てください非常に良いビデオです:Jason Dolinger on Model-View-ViewModel。
MVVM (Model View View Model) Design Pattern for Winforms必要に応じてWPFに変換するのが簡単になる別のオプションがあります。 Magical.Trevorは、プロパティ名に基づいた自動バインディングも含まれている、WindowsフォームのMVVMのサンプルです。
また、あなたは、MVCを使用しているなぜ自問してみてください。
が明確になると、は1つの実装または別の実装を選択しやすくなります。
この「CAB」とは何ですか? –
@AgnelKurianのCABは、アプリケーションの構築方法に関するMicrosoftのサンプルコードのセットでした。これは現在ほとんどの歴史です。 –
ハハ!はい、私はそれらの "アプリケーションブロック"を覚えています。 –
あなたはPureMVCを見ましたか?私は、MVCが特定の実装を構築し始めた後は、MVCの実際の外観に誰も同意できないことを発見しました。
更新:MobileMVCのような簡単なものから独自のものを作成することができます。コンパクトフレームワークのコードは、Windows上でOKをコンパイル/実行する必要があります。これは学校の割り当てなので、MVCが実際にどのように動作するかを実際に学習するには時間を費やすことをお勧めします。
私は書店を管理する非常に単純なアプリケーションのための学校の割り当てを持っています.PureMVCのようなフレームワークの使用にはまったく嫌です。私はもっと簡単なものを探しています。 – kjv
Windowsフォームを使用して独自のMVCを実装する良い例は、hereです。ソースコードが含まれています。
この課題を読んで、学習し、コードを書くときに、MVCの実装方法について多くの意見が分かれていることがわかります。これは、懸念の分離だけでなく、これを引き上げるために必要な「配管」の良い例を反映した単純なケースです。
あなたが学校にいるときは、おそらく他のポスターが推奨しているようなフレームワークに戻ってほしいでしょう。
Microsoft Composite Interfaceアプリケーションブロックは、実装された他のパターンの中でもMVC実装としての生活を開始しました。しかし、リリース版はMVP実装に発展しました。これは、MVCコンセプトの一種の解釈であると主張できます。
非常に完全なMVP実装のコードを確認したい場合は、Microsoft Smart Client Software Factoryのコンポーネントの1つとしてMS-CABを見つけることができます。ソースコードが付属しています。あなたはそれを見つけることができますhere。がんばろう!
UPDATE:以下の私の前の回答に加えて、私は"Presenter First" approach(特にPDF記事など)について読んで示唆
私の代わりにMVCのMVP(実際PassiveViewパターン)を推薦します。このために特別なフレームワークは本当に必要なく、コードをどのように整理するかだけです。 (私は通常取る)
一つのアプローチは、それぞれのウィンドウを分割することである3つのエンティティに形成:
例コード(単にイラストのための簡単な擬似コード):
interface IView
{
string Username { get; set; }
string Password { get; set; }
event EventHandler LogOnButtonClicked;
void InformUserLogOnFailed();
void MoveToMainScreen();
}
class Presenter
{
public Presenter(IView view)
{
this.view = view;
view.LogOnButtonClicked += new EventHandler(OnLogOnButton);
}
private void OnLogOnButton()
{
// we ask some service to verify the username/password
bool isLogOnOk = logOnService.IsUserAndPasswordOk(view.Username, view.Password);
if (isLogOnOk)
view.MoveToMainScreen();
else
{
view.Username = "";
view.Password = "";
view.InformUserLogOnFailed();
}
}
private IView view;
}
class Form : IView
{
public Form()
{
presenter = new Presenter(this);
}
public string Username
{
get { return TextBoxUsername.Text; }
set { TextBoxUsername.Text = value; }
}
public string Password
{
get { return TextBoxPassword.Text; }
set { TextBoxPassword.Text = value; }
}
public void InformUserLogOnFailed()
{
MessageBox.Show("Invalid username or password.");
}
public void MoveToMainScreen()
{
// code for opening another form...
}
private Presenter presenter;
}
これはPassiveViewと呼ばれるMVPバリアントの実装です。パッシブビューでは、ビューはプレゼンターの選択肢ではありません。 同様の例(ただし、REALYパッシブビューの場合)は、このサンプルをチェックしてくださいhttp://www.danieleteti.it/?p=221(Delphi言語の例) –
の可能複製(http://stackoverflow.com/questions/ [どのようにWindowsFormsアプリケーションでMVCを実装するのでしょうか?] 122338/how-you-you-implement-mvc-in-a-windowsforms-application) – nawfal
も参照してください[データバインディングの型を安全にし、リファクタリングをサポートする方法](http://stackoverflow.com/questions/1329138/how-to –