WPF - Где разместить DAL в 3-уровневой архитектуре с MVVM? - PullRequest
6 голосов
/ 06 июля 2010

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

Насколько я понимаю, мы имеем:

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

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

Ответы [ 3 ]

9 голосов
/ 06 июля 2010

Строго говоря, DAL не является частью шаблона MVVM.DAL находится где-то «позади» модели, и модель представления и просмотра ничего не должна знать о DAL.

Например, представьте сущности как свойства вашей модели, которые загружаются при первом доступе.

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);
    }
} 
1 голос
/ 06 июля 2010

Доступ к данным - это отдельная и независимая проблема ... Вы можете реализовать ее множеством различных способов и шаблонов, но во всех случаях конечным результатом является модель, которая будет использоваться вашими классами MVVM.
WCF может возвращать классы, используемые в вашей модели, или он может возвращать более простые классы, которые спроектированы просто как объекты передачи данных, в которых вы должны будете преобразовать эти объекты в экземпляры классов, определенных в вашей модели ...
Фактический доступ к данным (само из базы данных, конечно, кодируется на стороне сервера WCF ...

0 голосов
/ 06 июля 2010

Есть тонны очень длинных постов и описаний в блоге по организации всего этого.Вот что я прочитал совсем недавно (сегодня):

[текст ссылки] [1]

[1]: http://dotnetslackers.com/articles/data-management/About-layers-separation-and-Entity-Framework.aspx "Dino Esposito на EF и Layers

...