WPF-где поместить DAL в 3-х уровневый архитектурный дизайн с MVVM?


Я довольно Новичок во всей этой N-уровневой архитектуре, и у меня были некоторые вопросы об использовании MVVM с 3-уровневым приложением.

В моем понимании, мы имеем:

  • представление, или слой пользовательского интерфейса, который является файлом xaml
  • модель, представляющая собой пользовательский класс, содержащий свойства и методы, которые "моделируют" объект данных
  • Модель вида, которая является "адаптером" между видом и моделью
  • сервер WCF, который должен обрабатывать доступ к базе данных среди прочего
  • база данных SQL для хранения данных

Мой вопрос в том, как я могу собрать все это вместе, используя уровень доступа к данным? С MVVM у меня были бы модели, содержащие методы для загрузки / обновления самих себя. Вместо этого это должно быть что-то, что происходит на WCF сервера? Если да, то должна ли ссылка на сервер храниться в модели или ViewModel? И как это должно называться?

3 5

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