Asp.Net MVC2 TekPub Starter Методология сайта вопрос - PullRequest
3 голосов
/ 08 июня 2010

Хорошо, я только что натолкнулся на это, и я должен был только проверять свои электронные письма, однако я закончил наблюдать за этим (и не за горами, подписываясь на TekPub).

http://tekpub.com/production/starter

Теперь это приложение является отличной отправной точкой, но оно поднимает одну проблему для меня и процесса разработки, которому, как мне показали, следуют (правильно или неправильно). При передаче данных в представление преобразование из объекта LinqToSql отсутствует. Есть ли какие-нибудь негативы к этому?

Основное, что я вижу, это проверка, это вызывает проблемы при использовании встроенной проверки MVC, поскольку это то, что мы используем широко. Поскольку мы используем встроенные объекты, сгенерированные LinqToSql, как можно добавить валидацию, например

[Required(ErrorMessage="Name is Required")]
public string Name {get;set;}

Заинтересован в понимании преимуществ этой методологии и любых отрицательных моментов, которые, если мы возьмем ее на себя, приобретут опыт в процессе разработки.

Должно ли это быть руководством, и мы должны использовать ViewModels? Если да, то должны ли мы всегда использовать их даже в простых случаях? И как / где в логике приложения Entity преобразуется в ViewModel?

1 Ответ

1 голос
/ 08 июня 2010

С объектными объектами вы можете использовать классы друзей, в результате чего вы создаете второй класс, который действует как поставщик метаданных для вашего объекта. Например, с помощью сущности Customer, сгенерированной Linq-to-Sql, я мог бы создать класс друзей, например, так:

[MetadataType(typeof(CustomerMeta))]
partial class Customer {

}

public class CustomerMeta {

  [DisplayName("Forename", Required(ErrorMessage = "Forename is required.")]
  public string Forename { get; set;}
}

Объекты создаются как частичные классы, поэтому вы можете добавить к ним свой собственный код.

В качестве альтернативы, вы можете отказаться от передачи типов ваших сущностей на ваши представления и создать конкретные модели, основанные на требуемой функциональности, например, у меня обычно будет сущность User, но когда мне нужно создать User, у меня есть нечто, называемое CreateUserSpec модель:

public class CreateUserSpec
{
  [DisplayName("Forename")]
  public string Forename { get; set; }
}

Имеет подмножество свойств пользователя, только те, которые необходимы для создания пользователя. Это модель, которую я передам своему представлению и снова заполню из данных формы. Например:

public class AccountController
{
  public ActionResult Register() {
    return View(new CreateUserSpec());
  }

  [AcceptVerbs(HttpVerbs.Post)]
  public ActionResult Register(CreateUserSpec spec) {
    if (!ModelState.IsValid) {
      return View(spec);
    }

    var user = UserFactory.CreateUser(spec);

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