モデルに Person クラスがあり、その属性のうち 15 個をビューのラベルに割り当てたいと考えています。ビューはモデルにアクセスすべきではありません。これは、コントローラーが Person の作成を処理することを意味します。ビューはコントローラーからこれらの Person 属性をどのように取得しますか? Controller に Person 型のメンバーが含まれている場合、View は次のような処理を実行できます。
lblFirstName.Text = theController.Person.FirstName;
lblLastName.Text = theController.Person.LastName;
lblCity.Text = theController.Person.City;
ただし、ビューはまだモデル (つまり、人物) に直接アクセスしています。コントローラーは独自の Person クラスを持ち、モデルのすべての Person 属性をコントローラーにコピーし、ビューで上記の構文を使用することができます。しかし、そのデザインには多くの重複があります。助言がありますか?
ちなみにこれはwinformです。モデルは別のプロジェクト/DLL でもあります。DTOとは?
モデルの Person 属性には特別なロジックがあり、ビューで問題が発生することは望ましくありません。たとえば、ビューは次のようになります。
文字列 fn = myController.Firstname;
また、FirstName プロパティのロジックが原因で例外がスローされます。そのため、コントローラーの軽量 (複製) バージョンの Person オブジェクトには、そのプロパティが文字列のみであるため、これらの問題はありません。
また、コントローラーからの非表示の Person プロパティを処理するために、ビューにはモデルへの参照が必要になることにも注意してください。私はそれが気に入りません。