2012-01-13 11 views
6

私は初めて.Netを使い、物事を学ぼうとしています。私は2010 Express Editionは、 Prism 4 WPF App - MVVM、リポジトリ、作業単位のパターンを実装したソリューションアーキテクチャ

  • プリズムv4がIoCのようユニティ、
  • SQL Server CEは、データストアとして
  • 、Visual StudioのCSHARP

    1. でPrism4 WPFアプリを開発しようとしています。

    私は(?)多くのことを学び、他の人の間でthisthisによってinfuenced、およびMVVM、リポジトリおよびUnitOfWorkのパターンを実装することに決めました。このアプリケーションは、単一のユーザー(私

    :-)そうしたデスクトップアプリケーションになります、私は次のプロジェクトとソリューションを作成しました:

    1. シェル(アプリケーションのレイアウトと起動ロジック)
    2. 一般的な(アプリケーションインフラストラクチャとワークフローロジック)
    3. BusinessModuleA(ビューとのviewmodels)
    4. BusinessModuleA.Model(ビジネスエンティティ - POCO)
    5. BusinessModuleA.Data(リポジトリ、ダットアクセス(EF?))
    6. BusinessModuleB(ビューとのviewmodels)
    7. BusinessModuleB.Model(ビジネスエンティティ - ?POCO)
    8. BusinessModuleB.Data(リポジトリ、データアクセス(EF))

    私の質問は:

    1. どのプロジェクトがどのプロジェクトを参照するべきですか?
    2. 私がリポジトリを 'BusinessModuleX.Data'に実装した場合、それは明らかに です。どこでIRepositoriesを定義する必要がありますか?
    3. どこでIUnitOfWorkを定義する必要がありますか、UnitOfWorkはどこに実装する必要がありますか?
    4. 私のViewModelsでUnitOfWorkとリポジトリを使用しても問題ありませんか? Instictは悪いデザインだと言います。
    5. 上記(4)が悪い場合、ViewModelはサービス レイヤ(別のプロジェクトですか?)経由でデータを取得する必要があります。次に、 エンティティへの変更をどのように追跡して、サービスレイヤでそれらのオブジェクトに関連するCRUDメソッドを呼び出すことができますか?
    6. これは意味があるのですか、それとも私は大きな画像が欠けていますか?
    7. [OK]を

    、私は私が私の最初の記事で、正確に何を望むかに自分自身を明らかにされていませんでしたかもしれません。来るべき答えはあまりありません。 @Rachelが提案した内容が即時の要求に対して効果的であるかもしれないが、コーナーに自分自身を描かないように注意したいと思うので、私はまだ答えを探している。私はOfficeで私の個人的な使い方のために開発したAccess Dbを持っています。これは成功し、現在50人以上のユーザーが使用し成長しています。アクセスコードベースの維持と変更は、最初はかなり簡単でしたが、アプリが進化するにつれて、崩れ始めました。だから、私は.Net/Wpf/Prismのすべてを書き直して、基本的なデザインの権利を得たいと思っているのです。

    ご相談ください。

    はその間、私はthis...

  • 答えて

    4

    まずオフを思い付いた、私は、少しだけShellにプロジェクトのリストを簡素化CommonModuleA、およびModuleBでしょう。各プロジェクトの中には、すべての場所を指定するサブフォルダがあります。例えば、ModuleAは、それはすべてのモジュールで使用されますので、私は、あなたのCommonプロジェクトでそのようなIUnitOfWorkなどすべてのインターフェイスおよびグローバル共有オブジェクトを置くViewsViewModels、およびModels

    用のフォルダに分けることがあります。

    IUnitOfWorkRepositoriesの実装方法は、おそらくモジュールの種類によって異なります。あなたの全体のデータベースへのアプリケーションのリンク、または共有データベース・オブジェクトの場合

    • 、その後、私はおそらくDataAccessLayerために2つの以上のプロジェクトを作成します。 1つはモジュールで使用できるパブリックインターフェイス/クラスを含み、もう1つはEntity Frameworkなどのデータアクセスレイヤの実際の実装を含みます。

    • 各モジュールに独自のデータベースまたはデータベース内の独自のオブジェクトセットがある場合(つまり、Customerモジュールがインストールされていない限りCustomerオブジェクトが存在しない場合)、モジュールにIUnitOfWorkを実装し、彼ら自身のデータアクセスを処理します。私はおそらくまだモジュールを構築するためのCommonライブラリにいくつかの汎用インターフェースを持っているでしょう。理想的には

    、すべてのモジュールとあなたのShellCommonライブラリにアクセスすることができます。モジュールは、ビルドされていない限り、互いにアクセスしてはなりません。たとえば、基本Customerモジュールで構築されたCustomer Statisticsモジュールは、Customerモジュールにアクセスする必要があります。

    あなたのViewModelがUnitOfWorkまたはRepositoryを消費するかどうかについては、Repositoryのみを使用します。理想的にはRepositoryはブラックボックスのようにする必要があります。ViewModelsはRepositoryを使用してデータを取得/保存できますが、実装方法はわかりません。リポジトリは、サービス、エンティティフレームワーク、直接データアクセス、またはどこからでもデータを取得でき、ViewModelは気にしません。

    私は、設計アーキテクチャには専門家だしかしそれは私がそれを構築したい方法です:)

    +0

    こんにちは、ありがとうございます。 M-V-VMをフォルダに編成しないで、同じプロジェクトで密接に結合しますか?もちろん、私のモジュールはそれぞれ独自のデータベースを持っており、もちろん「Common」以外の他のモジュールには全く関係ない/認識されません。 – yoursvsr

    +0

    私の4番目の質問は、UnitOfWorkと 'Repositories not' or 'を使うことです。リポジトリは、UnitOfWorkをコンストラクタに注入して仕事をしていると思います。また、各モジュールが独自のDataAccessLogicを処理できるようにすることで、すべての気密性が再結合されます。プリズムと上記のパターンが達成しようとする疎結合とモジュール開発の目的を上回っているのだろうか。 – yoursvsr

    +0

    @yoursvsrオブジェクトはプロジェクトを共有することができますが、依然としてデカップリングされます。たとえば、MVVMでは、モデルを参照するViewModelsと、モデル/ ViewModelを参照するビューのみが参照する必要があります。実際の物体が存在する場所は本当に重要ではありません。 – Rachel

    関連する問題