この分野での経験はほとんどなく、MVVMを使用してWCFバックエンドと通信するWPFスマートクライアントアプリを作成しており、そこにあるすべての情報から正しい決定を下すのに本当に苦労しています。これは、この分野でより経験豊富な人々がここで解決できることを願っている一連の質問につながります。
例として、画面の1つで、注文を入力したり、注文に注文明細を追加したりできます。
モデルとして何が使われていますか?
WCFサービスには、次の簡略化されたDTOがあります。
public OrderDTO
{
string orderDetails { get; set; }
List<OrderLineDTO> OrderLines { get; set; }
}
public OrderLineDTO
{
int customerId { get; set; }
int productId { get; set; }
double quantity { get; set; }
}
そして、次の方法を持つWCFサービス:
public OrderService Order
{
CreateOrderResponse CreateOrder(OrderDTO order)
}
INotifyPropertyChanged
WPFスマートクライアントでは、DTOへの参照がありますが、純粋に転送用であるため、明らかに実装されていません。
質問
推奨されるアプローチは、これらのDTOINotifyPropertyChanged
をAutomapperなどを使用して実装するモデルに変換することですか?または、DTOをViewModelで直接モデルとして使用する必要がありますか?
ビューモデル間の通信
現在、 ViewModelsとの2つのタブ(Order
と)を持つ注文ビューがあります。[注文]タブには、含まれている顧客IDと名前があります。で顧客を選択するときは、その顧客に属する製品のみが表示されるように、顧客が選択されていることを通知する必要があります。OrderLines
OrderViewModel
OrderLineViewModel
ComboBox
OrderView
OrderLineView
ComboBox
質問
このシナリオでは、にどのようにOrderViewModel
通信しますか?OrderLineViewModel
注文明細の追加とロジック/ビジネスルールの適用
サーバーレベルのアプリケーションは、PC、モバイルデバイスなどの複数のクライアントで使用されるため、すべてのビジネスルールがサーバーレベルのアプリケーションに適用されていることを確認したいと思います。例として、注文明細が追加された場合。特定の製品タイプの場合、顧客が特定の認証を持っている場合にのみ追加できます。
ただし、MVVMについて読んだことはすべて、モデルがビジネスルールと動作を適用するものであると述べています。これらの例はすべて、クライアント側でモデルを実装しています。理想的には、クライアントとサーバーの両方で同じチェックを複製したくないので、これが発生しないようにする方法を考えていました。
質問
ユーザーが無効な行を追加し、サーバーに要求を送信し、サーバーに関連するルールを適用させて応答を返すことを許可しますか?または、サーバーにリクエストを送信する前に、スマートクライアントアプリでロジックを適用しますか?
ここで概説したすべての分野で本当に良くなりたいと思っています。ご回答いただきありがとうございます。
ありがとう
アレックス
編集: これは私が前進するための最善の方法に関してもう少し明確になるのを助けてくれたので、皆さんの貢献に感謝します。すべての答えは良かったのですが、この段階での私の考えに最も合うので、私はUriの答えを受け入れることにしました。ただし、DTOのIDからViewModelのリストであるItemsSourceのSelectedItemへの変換を処理するための最良の方法はまだわかりません。コンバーターが機能する可能性があることはわかりますが、別の解決策を見つけようとしています。ありがとうアレックス