Репозиторий и ViewModel в asp.net MVC 3 - PullRequest
3 голосов
/ 15 ноября 2011

Вот ситуация, с которой я борюсь.У меня есть Object Model:

public class MyModel 
{
  public string Prop1 {get; set;}
  public string Prop2 {get; set;}
//etc

}

Затем у меня есть Object ModelView

public class MyModelView
{
  public MyModel MyModelObject;

  public SelectList PropToBeSelected1 {get; set;}
  public SelectList PropTobeSelected2 {get; set;}
 //etc

}

У меня также есть класс MyModelRepository, который выполняет операции удаления и обновления для MyModel.

Пока все хорошо и ясно.

Вопрос: PropToBeSelected1 и PropTobeSelected2 - это выпадающие списки, содержимое которых поступает из базы данных.Должны ли методы, извлекающие это содержимое, быть помещены в мой MyModelRepository?Или я должен создать другой репозиторий для ViewModel?

Спасибо.

Ответы [ 2 ]

1 голос
/ 15 ноября 2011

Ответ НЕТ, вам не следует создавать для них репозиторий, если они вам действительно нужны в этом представлении. так что они, вероятно, являются объектами-значениями, как сказал @jasonhooten, и они должны быть подключены к основному объекту-агрегату, который используется репозиторием

Наконец, я не определяю структуру ViewModel до тех пор, пока не закончу представление и не заставлю его работать в первую очередь, и поэтому я основал и создал DevMagicFake, с помощью DevMagicFake вы откладываете все решения проекта, касающиеся структуры ViewModel или хранилище или то, как вы будете использовать сервисный уровень, все это будет отложено после полного завершения вашего представления и заставит его работать сначала как BDD (Behavior Driven Development) и TDD (Test Driven Development), чтобы вы могли принимать правильные решения по дизайну и Сама объектная модель

Итак, я просто создаю метод действия следующим образом

        public ActionResult List(MyModelView myModelView)
    {
        FakeRepository<MyModelView> repository = new FakeRepository<MyModelView>();
        repository.Add(myModelView);
    }

Этот фальшивый репозиторий позволит мне сохранять и извлекать всю мою модель, даже если это сложная модель, пока я не закончу и не завершу весь вид и сначала не заставлю его работать, а затем я начинаю благодарить за то, как реальный дизайн и реальный репозиторий должны выглядит, как и на

Для получения дополнительной информации о DevMagicFake и этом подходе см. Эту ссылку

DevMagicFake на CodePlex

1 голос
/ 15 ноября 2011

Во-первых, вы действительно не хотите, чтобы ваши доминантные объекты использовались в вашей viewModel.Ваша viewModel должна быть чистой только с примитивами (такими как строки, целые числа ... и т. Д.).Поэтому я бы предложил использовать AutoMapper для сопоставления двух строк реквизита с вашей viewModel.

Со списком выбора есть много способов сделать это, но я могу себе представить, если онисписки свойств, то это не фактические объекты, а объекты-значения.В этом случае создание репозитория для них - это слишком много, и граничит с плохим дизайном.

Я бы поместил 'get' списков свойств в ваш MyModelRepository.Что-то вроде

_myModelRepository.getProperties1For(myModel);

Затем снова включите AutoMap, чтобы получить список выбора.

Редактировать: Как @ M.Radwan указал для сложных моделей домена, я сделаю viewModels insdie viewModels для облегченияmapping.

Модель предметной области -

public class User : Entity
{
   public Address Address { get; set; }
}
public class Address
{
   public string Street {  get; set; }
   public string Zip { get; set; }
}

будет отображаться в

public class DetailsViewModel
{
  public int Id { get; set; }
  public string Name { get; set; }
  public AddressViewModel Address { get; set; }

  public class AddressViewModel
  {
    public string Street { get; set; }
    public string Zip { get; set; } 
  }
}

, что, по нашему опыту, является единственной причиной для усложнения вашей viewModel.Мы добавим списки выбора в нашу viewModel, хотя в последнее время мы использовали IEnumerables внутренних viewModels и вызывали пользовательские EditorFor или DisplayFor, чтобы превратить их в выпадающий список / список флажков / переключателей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...