0

Windows Phone 7アプリケーションを開発していますが、MVVMパターンが役立つと聞きました。このサイトでたくさんの記事や質問を読んでいますが、ビューとモデルの架け橋としてのビューモデルの説明しか得られません。モデルがCustomerクラスの場合、ビューモデルは、データバインディングに使用される顧客のコレクションであると見なされます。これは非常に簡単な使用法です!

ネットワークから顧客をロードし、それをビューに表示してからローカルデータベースに保存する場合、そのすべてのロジックコードをビューモデルに配置する必要がありますか?

4

2 に答える 2

2

いいえ、関心の分離について読んではいけません。各クラスを変更する理由は1つだけです。ビューモデルは、ビューに表示されるモデル情報の変換のみを担当する必要があります。

データストアからモデルインスタンスを取得するには、別のサービス実装が必要です。

例えば:

public class MyViewModel
{
    private readonly ICustomerRetrieval _retrievalService;

    public MyViewModel(ICustomerRetrieval retrievalService)
    {
        _retrievalService = retrievalService;
    }

    public IEnumerable<CustomerViewModel> Customers
    {
        get { return _retrievalService.GetAllCustomers().Select(AsViewModel);
    }

    private CustomerViewModel AsViewModel(CustomerModel cust)
    {
        return new CustomerViewModel(cust);
    }
}

サービスが顧客モデルの検索を担当しているのに対し、ビューモデルはこれらをUIから使用可能なものに変換するだけであることがわかります。

于 2012-11-26T12:57:04.840 に答える
1

ネットワークから顧客をロードし、それをビューに表示してからローカルデータベースに保存する場合、そのすべてのロジックコードをビューモデルに配置する必要がありますか?

「ネットワークから顧客をロードする」ロジックが、ビューとそのビューのみに固有である場合、それをそのViewModelに配置することは理にかなっています。

顧客の読み込みを他のビューと共有する必要がある場合は、起動時またはバックグラウンドで読み込まれるデータレイヤーに配置する必要があります。

ViewModelには、そのビューのみに固有のコードが含まれている必要があります。データがアプリケーションの他の場所で必要な場合は、データのロードなどの「コア」機能を含めるべきではありません。

于 2012-11-26T12:54:03.963 に答える