2016-11-10 6 views
-2

私は私の会社のプロジェクトを違う方法で見ているので、私の知識をチェックしたいと思っています。MVCとMVVMのソフトウェア設計パターンの知識は正しいですか?

私が知っていることは、我々は我々のプロジェクトでのMVCのデザインパターンを使用したい場合は、我々はこのように私たちのプロジェクトを分離、次のとおりです。

ビュー部分は、WPFでui.xamlファイルを意味し、当社のデザイン・UI、ui.designer.csですWinFormsでは、Androidではui.xml、QtQuickではui.qml、XCodeではui.uiです。

コントローラコントローラは、類似の名前のデザイナファイルに最も近いソースファイルです。 WPFではui.xaml.cs、WinFormsではui.cs、Androidではui.java、QtQuickではui.h/ui.cpp、Xcodeではui.swiftです。

部分は、主な操作を行う他のクラスです。私は通常、その責任を言うためにサフィックスManager(またはそのようなもの)を追加します。

とMVVMのために、私はまた、ビューはそのビューモデル部分のから継承されたと見るの一環として、私の以前のコントローラを検討していることをinterfaceまたはabstract classを使用しています。

1つのプロジェクトですべてを構築するのに十分です。

しかし私の会社のプロジェクトには多くのクラスがあります! ユーザーコントロールビューの名前を持つ別の独立したライブラリのフォルダの名前、およびViewModelにの名前を持つライブラリの別のセットを設計者のための別々のライブラリのフォルダとそのコントローラの場合のモデル。そして、彼らはそれがMVCとMVVMの混合であると言います。最も驚くべき点は、ソフトウェア全体が単一のプログラマーによって書かれた38の別々のプロジェクトを有し、チームが小さいことである。

私の知りは正しいですか?私の会社のプロジェクトが正しい方向にあるのかどうか教えてください。

+0

なぜdownvoteですか?より良い質問をするために私に教えてください。 –

+0

私はちょうどさまよっています、どうやって正解を決めるのですか? – Tengiz

+0

@Tengiz私は自分の知識を共有したスタイルに基づいて正しい答えを決定しようとしています。 –

答えて

1

MVCとMVVMパターンについての知識は正しいですか?あなたはコントローラ(ViewModel)に間違いがありました。私はModelでも同じと思います。

あなたのプロジェクトは正しい方向にありますか? doesntは正しいように見える。

私たちは、より良い依存関係管理を持つために、すべてのクラスのビューとViewModels(MVCのコントローラでも同じです)にインターフェイスを使用します。 IoC(Inversion of Control)と私たちが使用している技術のほとんどは、Service Locatorや何らかの種類のサービスルックアップオブジェクトを使用して、インタフェースのみに依存するクラス(具体的なImpl。)に依存するDependency Injectionと呼ばれます。

まず第一に、あなたはロジックコードを処理し、ViewModelには、結合およびビューのためのデータモデルの表現を処理させる、コードプロジェクトにこれらのシリーズをチェックアウトするMVVMでコントローラーを混在させることができます: http://www.codeproject.com/Articles/173618/MVVM-sharp-Episode-1

しかし、私はよすべてのメリットを使用しない限り、MVCVMの大きなファンではありません。

コントローラまたはViewModelは、ビューから別のクラスに分かれています。これらのクラスにはロジックコードを入れています。たとえば、 "ui.xaml.cs"はコントローラではありません。そのファイルはui.xamlクラスの別のファイルです。どちらもViewと呼ばれる同じクラスです。私たちはプレゼンテーションパターンを使用して、ViewのコードのBehindコードからロジックコードを分離することを忘れないでください。

モデルは、グループ化されたプロパティのオブジェクトです。 Modelクラスとロジックコードを混在させないようにしています。モデルはバリデーション関数(例:.IsNameValid()など)やオブジェクトの別の表現(たとえば.ToString())を作成するための他の関数を持つことができます(例えばCRUDのような)。私たちは主な業務をモデルに入れません。主な操作はコントローラ(ViewModels)にありますが、結果はViewのフィールドのいくつかにバインドするモデルになります。

「ユーザーの検索」ボタンをクリックすると、SearchUserコマンドはController内の関数を実行し、結果でユーザーモデルオブジェクトをFoundUserという名前のプロパティ(コントローラ内)に設定し、ViewのTextBoxはFoundUserの名前を示します。

0

各アプリケーションで、プレゼンテーションレイヤーには、複数のデザインパターン、MVC、MVP、MVVMなどを使用できます。ただし、プレゼンテーションレイヤーの1つのデザインパターンに従うことがベストプラクティスです。一貫性があり、より保守的です。

また、ModelとControllerの定義についていくつかの誤解があると思います。そのことによって、パターンをよりよく理解できるようになります。

+0

私の誤解は何ですか? –

+0

モデルとコントローラの定義に修正が必要です。私はこれらの定義をMVCまたはMVVMの全概念と混在させると思います。 –

+0

大学の講師からMVCに基づいたiOSプログラミングを教えるチュートリアルを見ました。あなたはそれを自分で修正していただけますか? –

関連する問題