私はMVVMと共にEntity Frameworkを使用しています。 私の層は、次のようになります。viewModelに直接リンクされたデータベースのエンティティ - 悪い習慣ですか?
- ビュー
- のViewModel:データを提供して表示するためのコマンド。
- サービス:DALへのアクセスを提供します。ビジネスロジックを含みます。
- DAL:データベースへのアクセスを提供します。私はUnitOfWorkと共にリポジトリパターンを使用しています。
私のViewModelsのプロパティは、データベースからのエンティティにある程度直接バインドされています。例:Save
が呼び出されたときに
public class MyViewModel
{
private MyEntity _myEntity;
private MyService _myService;
// A property which is bound to my view (bidirectionally)
public string TextToDisplay
{
get { return _myEntity.SomeText; }
set
{
if (_myEntity.SomeText != value)
{
_myEntity.SomeText = value;
RaisePropertyChanged("TextToDisplay");
}
}
}
// Method called by a command when the "Save"-button is pressed
private void Save()
{
_myService.Save(_myEntity);
}
}
public class MyService
{
private MyRepository _myRepository;
private IUnitOfWork _unitOfWork;
public void Save(MyEntity myEntity)
{
_myRepository.Insert(myEntity);
_unitOfWork.Save();
}
}
だから、(ID
のような)データベースが生成した属性/プロパティが自動的に生成/更新されます。
これは副作用を引き起こしますか?それは悪い習慣ですか?
どのように処理しますか?データベースからビューモデルにオブジェクトを渡すときに、オブジェクトを「切り離す」か、コピーしますか?または、オブジェクトが別の型であってもviewmodelに渡される必要がありますか?これをどうすれば完全に処理できますか?