2009-08-05 7 views
1

私は小さなチームで働いています。多くの場合、同じビジネスモデルであるがエクスポージャーが異なる複数の配信メカニズムがあります。私たちは、モデルを共有し効率を上げ、アプリケーション全体で有効性を確認する助けが必要です。複数のUI配信メカニズムのモデルと検証

Silverlight 3(非RIAサービス)、ASP.net MVC、およびWPFでのユーザーエクスペリエンスとコードの再利用の両方について、モデルに対して一貫性のある検証を作成する最適なメカニズムは何ですか?

ドメインモデルでは、EF、NHibernate、またはLinq to Sqlを使用できます。 DTOとプレゼンテーション/ビューモデルの作成も受け入れられます。

残念なことに、データベースは従来のものであり、キーの適切な規則に従わないということです。

私たちは、単一のモデルセットと検証(単純な検証)の訪問者など、すべての配信メカニズムで簡単に使用できるようにしたいと考えています。 MVPまたはMVVMパターンはUpdateControlsと同様に魅力的ですが、すべてのメカニズムで機能するような単一のパターンを見つけることができませんでした。

Silverlight 3からComponentModelを削除すると、Web上のほとんどの例が無効になっているようです。

アドバイスをいただければ幸いです。

答えて

1

私は個人的にビジネスモデルのためのPlain Old ClR Objects POCOを使用します。

using System.ComponentModel.DataAnnotations; 

上記の名前空間は、オブジェクトにも検証をもたらします。エンタープライズアプリケーション検証ブロックがありますが、これをSilverlightクライアント側に統合する方法がわかりません。

しかし、ビジネスモデルを作成し、DataAnnotationsで装飾し、このビジネスモデルを再利用することができます。

これは、NHibernateでそのままの状態でフィットしますが、EFではできません。これはPOCOを考慮しないためです。 Linq-to_Sqlは信じますが、Linq-To_SqlのSQLメタデータまたは特定のメタデータを使用してマッピングファイルを使用する必要があります。

問題の1つでも問題はありませんが、むしろシナリオは、私がWCFを使用してSilverlightとサーバーを通信するというシナリオです。これにより、サービスの生成コードベースが生成され、これを変更すると、次にサービスを更新するときに変更が失われることになります。

MetaDataTypeの使用は、Silverlightの内部で利用できることを望みます。再生時に作業を失うことなく生成されたクラスを飾ることができるからです。

WCF上で.NETから.NETへの作業を行っている場合、より大きな機能を得ることができますが、検証とエラーの戻りが相互運用可能である必要がある場合、HasErrorsとError []プロパティ。私は現在、次のことをやっている:

シルバー: - System.ComponentModelを使用して、クライアント側の検証を適用する - セッターとゲッター を傍受サービスプロキシクラスをラップViewModelに - WCFサービスプロキシ 生成します。DataAnnotations

ビジネスモデル: - 私はNHibernateの でPOCOを使用しています - 私は、エンタープライズ・アプリケーション検証ブロック を使用しています - 私は、プロパティ

WCF HasErrorsとエラーとベースのドメインクラスを持っている: - 私は

AddClientResponse AddClient(AddClientRequest request) 

すなわち、要求と応答を使用してのDTOを使用してSilverlightでは、WCFサービスを消費WCFサービスしながら、ビジネスを使用して、データアクセス層のリポジトリを消費します。

上記の説明では、フレックスクライアントと一緒に公開することができます。また、Flexクライアント側でデータ検証を処理しないと、クライアントは基本応答クラスでエラーを受信します。次に、クライアント側の検証を行うか、サーバーから返されたエラーを処理する必要があります。クライアント側は、ラウンドトリップを保存します。

[DataContract] 
public class BaseResponse 
{ 
    [DataMember] 
    public Error[] Errors { get; set; } 
    [DataMember] 
    public Boolean HasErrors { get; set; } 
} 

は私が:-)笑いつものように自分の知識の探求に返信用

アンドリュー

+0

感謝しています。私はベータ版で注釈のパスを開始しましたが、何らかの理由でリリースから削除されました。私はRIAサービスリリースがこれを戻すことを願っています。私は、人々がその間にやっていることに興味がありました。また、MVCリリース2もメタ・ヘルパー・クラスを介してアノテーションの方法になっているようです。利用可能な多くのオプションにより、サービス側の検証が容易です。クライアント側(つまり、タブが消えるとすぐに)は、すべてのUIオプションのための手作業であるようです。しかし、xValフレームワークはMVCでこれを助けるようです。 –

関連する問題