WPF-где поместить DAL в 3-х уровневый архитектурный дизайн с MVVM?
Я довольно Новичок во всей этой N-уровневой архитектуре, и у меня были некоторые вопросы об использовании MVVM с 3-уровневым приложением.
В моем понимании, мы имеем:
- представление, или слой пользовательского интерфейса, который является файлом xaml
- модель, представляющая собой пользовательский класс, содержащий свойства и методы, которые "моделируют" объект данных
- Модель вида, которая является "адаптером" между видом и моделью
- сервер WCF, который должен обрабатывать доступ к базе данных среди прочего
- база данных SQL для хранения данных
Мой вопрос в том, как я могу собрать все это вместе, используя уровень доступа к данным? С MVVM у меня были бы модели, содержащие методы для загрузки / обновления самих себя. Вместо этого это должно быть что-то, что происходит на WCF сервера? Если да, то должна ли ссылка на сервер храниться в модели или ViewModel? И как это должно называться?
3 ответа:
Строго говоря, DAL не является частью шаблона MVVM. Дал находится где-то " за " моделью, а вид и модель вида ничего не должны знать о Дале.
Например, представьте сущности как свойства вашей модели, которые загружаются при первом доступе.
public class ProductListModel { public List<Product> AllProducts { get { if (_AllProducts == null) _AllProducts = MyServiceProxy.LoadAllProducts(...) return _AllProducts; } } public void SaveChanges() { if (_AllProducts != null) MyServiceProxy.SaveProducts(AllProducts); } }
Доступ к данным-это отдельная и независимая проблема... Вы можете реализовать его несколькими различными способами и шаблонами, но во всех случаях конечным результатом является модель, которая будет использоваться вашими классами MVVM.
WCF может возвращать классы, используемые в вашей модели, или он может возвращать более простые классы, которые предназначены только как объекты передачи данных, в которых cxase вам придется преобразовать эти объекты в экземпляры классов, определенных в вашей модели...
Фактический доступ к данным (к-от Сама база данных, конечно, закодирована на стороне сервера WCF...
Есть тонны очень длинных сообщений в блоге и описаний по организации всего этого. Вот тот, который я прочитал совсем недавно (сегодня):
[текст ссылки][1]
[1]: http://dotnetslackers.com/articles/data-management/About-layers-separation-and-Entity-Framework.aspx "Dino Esposito on EF and Layers