c# MVC Шаблон кодирования для поддержания свойств модели - PullRequest
0 голосов
/ 11 марта 2020

Правильно, так что а) Я не уверен, что это правильный форум для этого вопроса, мне не удалось найти лучшее предложение, и б) Я не смог найти ответ на вопрос, которому я не могу поверить, что я раньше не спрашивал:

Итак, если у меня есть модель, стандартная форма для заполнения и ошибки, поэтому я возвращаю ее пользователю, как мне или как СЛЕДУЕТ структурировать код, чтобы сделать Вы уверены, что все поддерживающие свойства созданы?

Пример:

public ActionResult DoThing()
{
    var model = new DoThingModel();
    model.Things = ThingService.FetchThings();
    //Do Other Things
    return View(model);
}

Довольно стандартное действие GET

[HttpPost]
public ActionResult DoThing(DoThingModel model)
{
    var valid = ThingService.ValidateThing(model);
    if(!valid)
    {
        model.ValidationMessage = "Ohh no validation failed";
        model.valid = false;
        return View(model); //I have't rebuilt model.Things with ThingService.FetchThings()
    }
    else
    {
        return RedirectToAction("Success");
    }
}

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

Теперь, это очень простой пример, и я мог бы просто передать вещи обратно в форме или дублировать строку кода, которая его заполняет. Но представьте, что у меня гораздо более сложная модель с панировочными сухарями, множеством свойств, которые необходимо заполнить. Дублирование кода = плохо, так как я должен убедиться, что в модели есть все, что мне нужно, прежде чем передать его обратно? Я думал о создании сервиса, но это сервис с одной функцией. Я думал об использовании конструктора, но это плохо сочетается с привязкой модели. Я думал о создании DoThingModel.Init (), который выполняет всю работу, но размещение такого кода внутри класса модели кажется грязным. Я поиграл с частной функцией в контроллере, которая заполнила все необходимые свойства, но это снова кажется грязным.

Я чувствую, что должен быть стандартный шаблон кода, который идет => Создать новую модель => Сделать уверен, что в модели есть все, что поддерживает страницу => вернуть модель => проверить модель => повторно применить любые свойства => вернуть модель => повторить, пока не будет действительным.

Как я уже говорил во вступлении, это должно быть стандартная вещь где-то, но я не могу ее найти.

...