2012-05-13 2 views
5

안녕하세요. 저는 MVVM을 배우려고합니다. 일부는 주로 (데이터) 모델이 VM (ViewModel)과 통신해야하는 부분에 대해 확실하지 않습니다.MVVM에 데이터베이스가있는 모델

클래스 사용자가있어서 Raiseproperty (INotifyPropertyChanged)를 사용하여 많은 속성이 있습니다. 이제 그 클래스를 VM에 연결하여 ViewModelPerson이라고 부르는 새로운 클래스를 만들지 만, 나는 오직 Person 만 표시하는 것은 쓸모가 없기 때문에 주로 Person 목록을 원합니다. 목록은 데이터베이스에서 수집됩니다 (SQLite)와 함께 Dapper. 이제 뷰 모델 또는 (데이터) 모델에서 관찰 가능 목록을 만들 필요가 있습니까? ViewModel에서 View에 바인드해야하므로 ViewModel ObservableCollection에 데이터베이스 정보를 삽입해야합니까? ViewModelPersonsList와 같은 생성자에 넣을 수 있습니까? SQlite DB에서 모든 사람을 모으고 목록에 삽입하는 쿼리가있는 생성자 ???

내가 MVVM 모델을 이해하지 못해서 이해가 되었기를 바랍니다. 뭔가 명확하지 않다면 물어보십시오. 제 질문에 대해 더 자세히 설명하려고합니다.

맥심

+0

내 대답이 도움이 되었습니까? –

답변

1

보기 ->보기 모델 -> 비즈니스 논리 -> 데이터 레이어 -> DB

또는

보기 ->보기 모델 -> WCF/웹 서비스 -> 비즈니스 논리 - > 데이터 계층 -> DB

뷰 모델에 Person 개체 목록이 필요한 경우 비즈니스 논리 계층을 호출해야하며 BLL은 데이터 계층을 호출하는 데 필요한 논리를 구현합니다. 귀하의 BLL은 목록을 반환하고 귀하의 VM은 바인딩을 통해보기에 해당 목록을 제공합니다.

업데이트 사람 개체도 같은 방식으로 작동합니다. VM은 업데이트 된 객체로 BLL을 호출합니다.

1

저는 Sqlite에 대해 언급 한 것을보고 나서, 여러분은 작은 WPF 프로젝트에 대해 이야기하고 있다고 가정합니다.

데이터베이스에 매핑 된 엔티티 프레임 워크 코드 우선 모델을 작성하는 것이 좋습니다 (this).

SQL Server Compact Edition을 사용하려는 경우에도 generated for you 데이터베이스를 가질 수 있습니다 (물론 이것은 Sqlite에서도 가능하지만 더 많은 노력을 기울여야 가능합니다).

어쨌든 DbContextUoW 개체로 사용합니다.

DAL을 통해 또는 ViewModel에서 직접 데이터를 처리하도록 선택할 수 있습니다.

어떤 경우 든, 두 개의 ViewModel 기본 클래스를 생성해야합니다. 하나는 TEntity를 노출하고 다른 하나는 TEntity 컬렉션을 노출합니다. VM에서 DAL 작업을 수행하는 경우 CRUD 메서드를 기본 CollectionViewModel에 추가하고 수동으로 호출하거나 사용자가 명령을 노출하여 호출하도록 할 수 있습니다.

관련 문제