9

入力してデータグリッドに表示したデータをユーザーが挿入、更新、削除できるアプリケーションを作成しています(CRUD操作)。

私のビューモデルでは、xamlにバインドされているプロパティが含まれています(Firstnameたとえば)。また、ナビゲーションプロパティと検証属性も含まれています。

      [Required(ErrorMessage = "First Name is a required field")]
      [RegularExpression(@"^[a-zA-Z''-'\s]{1,20}$", ErrorMessage = "First Name must       contain no more then 20 characters and contain no digits.")]
      public string FirstName
      {
        get { return _FirstName; }
        set
        {
            if (_FirstName == value)
                return;

            _FirstName = value;
            OnPropertyChanged("FirstName");
        }
    }

xamlさらに、 CRUD操作のインスタンスを作成する実行するコマンドが含まれています。

    private void UpdateFormExecute()
    {
        var org = new OrganisationTypeDetail();
        UpdateOrganisationTypeDetail(org);
    }

そして最後に、CRUD操作も含まれています。挿入、更新、削除など。

それが私の質問につながります。正しいMVVMの方法を実装したい場合、このコードはすべて、ビューモデルに含めるには多すぎますか?

モデルを使用してビューモデル内にコレクションを作成し、それを自分のモデルにバインドする必要がありますxamlか?これはそれを行う正しい方法でしょうか?

CRUD操作にリポジトリシステムを使用する必要がありますか?もしそうなら、どのようにテキストフィールドからモデルにデータを渡して更新するのですか?

WPF、MVVMは初めてで、適切なガイダンスなしでは適応するのが難しいと感じています。

4

2 に答える 2

3

これはMVVMを実装する正しい方法ですが、MVVMを実装する正しい方法ではありません。

これが意味するのは、このパターンを実装する正しい方法は1つもないということです。ビュー内に追加のロジックを持たずに(つまり、コードビハインドで)ビューにバインドできるViewModelを作成した場合は、MVVMの本質を捉えています。

コードにパターンや構造を追加するかどうかは、完全にあなた次第です。これが単純なアプリケーションであれば、パターンを軽くしておきます。先に進み、ViewModelがリポジトリと直接通信するようにします。あなたの現在のコードは、その点で私には問題ないように見えます。

これが大規模なアプリケーションの場合は、サービスレイヤー、データアクセスレイヤーなどのレイヤーをさらに追加することをお勧めします。依存性注入について考えたいと思うかもしれません。

ただし、パターンを採用したり、必要だと思ったからといってレイヤーを追加したりしないでください。依存性注入はクールに聞こえますが、多くの場合、それは価値があるよりも面倒です!

于 2012-11-23T09:52:12.203 に答える
0

私にとっては正しい方法ではありません。ビューモデルでFirstNameのようなプロパティを定義するのは良い考えではないと思います。ビューにはモデルのみが含まれている必要があり、ビューモデルはXAMLにバインドする必要があるモデルをラップする必要があります(必要な場合)。

また、モデルオブジェクトの作成は、ビューモデルから完全に独立している必要があります。ビューモデルはモデルの単位操作についてのみ知っている必要があり、検証はモデル内にある必要があります。たとえば、FirstName検証がViewModelにある場合、FirstNameプロパティを検証するためにGUIを制限しているだけですが、誰かが他の場所から設定した場合はどうなりますか。

于 2012-11-23T10:07:45.857 に答える