-View-モデル重い編成です。これらはMVCのコントローラとほぼ同等です。私はXAMLを使用してView-Modelsに直接バインドします。例QuotationItemModel.vbとxyz.vbなど。複数のXAMLページが1つのVMを共有することがあります。
-XAMLページは、ビューモデルの実装ごとにコマンドバインディングを使用すると仮定します。ボタンのクリック例がVMにルーティングされます。私はこれを達成できませんでした。なぜなら、UI調整ロジック(別のUIアーキテクト)が私のコマンドを委任することに干渉していたからです。 (CanExecute、Execute Func(Of Object、Boolean)ウィジェットのクリックイベント。)
-モデル。ここには1つの機能しかありません。彼女の仕事は、デリゲートをWebサービスの非同期コール完了イベントにフックし、その後Webサービスをトリガーします。 Deletegateの実装は実際にView-Model、つまりModel内ではなくQuotationItemModel.vbに戻ります。 Model.vbには1つの関数しかありません
重いバックエンド。メンテナンスの問題を軽減するためにデザインパターンを使用します。ここから、パターンが
などなどのコマンド、戦略、または抽象型との間のクロス十字可能性-The EDMX設計は - ビジネスオブジェクトはEDMX
で論理的な方法で相互作用するこの層に完全には明らかです - LINQ to Entityまたはここでパラメータ化クエリを実行します
- このレイヤは、請求トランザクションが発行される前にUnderwriting IDなどのビジネスロジックで構成されている必要があります。または、サーバーの日付に基づく見積の実行番号シーケンス。
- ビジネスオブジェクトのエンティティへの手動マッピングがあります。潜在的に面倒ではなく、常に
-resultは、3層アーキテクチャのための準備を生産、バックXML
3番目のプロジェクトは非常によく、間に他の軽量なWebサービスとソリューションを分離することができたとして渡されます。それから私はこの純粋な層で自分自身の接続文字列をEDMXに生成します。しかし、私のところは今や「2.5」レイヤー2アーキテクチャに似ています。私は慎重に中間層のWeb設定で接続文字列を公開します。 アーキテクチャとは、別のハードウェアプラットフォームを完全に持つことを意味します。層は、問題空間、すなわちUI、通信およびビジネスドメインにおけるドメイン駆動設計の分離である。技術的に言えば、(EDMXを超えて)SQL Serverのデータベースは、別のアーキテクチャ、すなわち、Windows Azure
ここには賛否両論があります。静かに批判を持って来てください、私は層を作ることに新しいです、本当に。
短所 データコントラクトが公開されていないと、ビジネスオブジェクトおよび契約の言語で通信するときにUIがブラインドになります。これまでは、EDMXをWCFレイヤーにすることで簡単に実現できました。 共有ビジネスオブジェクトを表すためにXelementを使用しました。しかし、私はまだデータベース内部を公開せずにデータコントラクトを公開する方法を見つけ出す必要があります。現在、私は自分のXelementsのデータベースフィールドを知り、コード化しています。
潜在的には、EDMXをバックエンドにするための静かなバインディングに似ています。沈黙は悪いことがあります。なぜなら、データがない列を取得した場合、疑わしい原因がたくさんあるからです。 XML結果からの良好なエラーメッセージによって解決できないものは、何も返されません。私の想像力を使って。
バージョン管理のための弱いメカニズム。新しいクライアントは、既存のクライアントがBackend-Ver 1.0を利用している間に、Backend-Ver 2.0へのサイレントリダイレクトのための別個の運用契約と相互作用するかもしれません。これにより、古いデータベースと新しいデータベースそれぞれに2つのEDMXがあるはずです。
Pros エクストリームデカップリング。私はEDMXを削除/再構築することができ、UIとWCFはまだコンパイルされます。私の3番目の解決策では、この極端なテスト作業でコンパイルエラーが発生します。
Silverlight UIから、Microsoft Report Viewerレポートへのトリガーと通信は、UIから呼び出されたのとまったく同じクラスを共有します。 「レポート用の追加のWebサービス機能」はまったくありません。 UIで要求されたEDMX +ロジックは、レポートではまったく同じものですが、選択しない限り PS:Silverlightはクエリ文字列を使用してフィルタ条件をレポートに通知します。
レポートには、再度EDMXが認識されていません。たとえば、バックエンドからEDMXを削除してから、レポートプロジェクトからデータ接続を更新すると、問題なくレポートプロジェクトがコンパイルされます。
複数のアーキテクチャに移行する準備ができています。季節的な負荷分散、顧客基盤の拡大などがアーキテクチャへのこの投資を引き起こす可能性があります。
ビジネスロジックの再利用性。たとえば、上司がSilverlightに疲れたら、UIビジネスオブジェクトをJSONに再コーディングするだけです。新しい要件を除いて、ビジネスロジックには何の変更もありません。例:生命保険に拡張して、現在Silverlightでコード化されているモジュールである既存の一般保険と共存させる。生命保険をHTML 5で想像しても、同じバックエンドと共存しています。両方のフロントエンドがEDMXを意識していないからです。私は、新技術の中からデータ契約を構築することに集中するだけです。
予期せぬ(実際にレイヤリングするのは初めてです)副作用です。私は潜在的にUIとは別にバックエンドをテストすることができます。 LINQ to Entity(そのEDMX)を操作します。ユニットテストのためにクール。
バージョン管理に関する問題を除いて、ビジネスロジックを更新しても、IIS(中間層)に新しい展開は行われません。
はとにかくここのために有能なソフトウェアアーキテクトセレナ・ヨー
階層化アーキテクチャサンプルからレイヤードアプリケーションソリューションガイダンスです。NET
http://layersample.codeplex.com/
http://layerguidance.codeplex.com/
あなたがダウンロードサンプル、EDMXが生活し、睡眠共通のバックエンド、以上のさまざまな技術を介して複数のUIを持つの創意工夫でお知らせ。さらに、必要に応じて選択的に呼び出されるWindowsワークフローの基盤を超えています。 SerenaがEDMXをどこに置いたかを確認することができ、実行可能なコードで実行できます。純粋な至福。
正しい名前空間の場所を意味しますか?私がEDMXを完全に切断したいのであれば、これは別個のプロジェクトを意味すると仮定します。だから私はこのプロジェクトをAppName.DataAccessと呼んでいます。したがって、EDMXエンティティはAppName.DataAccess.Entitiesのようなものになります。 – timmkrause
どういうことかというと、EDMXの名前空間がAppName.DataAccessのどこかにマップされていることを確認する必要があります。それ以外の場合は、あまり意味がありません。 –
データ、ロジック、およびサイトをもっと深く説明できますか?私は3層Webフォームプロジェクト(DataAccess、BusinessObjects、WebApp)から来ています。 「サイト」は実際のMVCプロジェクトですか?そして、これらの別々のプロジェクトはすべてありましたか? – timmkrause