用于维护模型属性的c#MVC编码模式
是的,所以a)我不确定这是否是这个问题的合适论坛,我没有找到更好的建议,b)我无法找到一个我不敢相信我以前没有问过的问题的答案: 所以,如果我有一个模型,要填写的标准表单和它的错误,所以我把它扔回给用户,我该如何,或者应该如何,构造代码以确保所有支持属性都被构造出来 例如:用于维护模型属性的c#MVC编码模式,c#,model-view-controller,design-patterns,C#,Model View Controller,Design Patterns,是的,所以a)我不确定这是否是这个问题的合适论坛,我没有找到更好的建议,b)我无法找到一个我不敢相信我以前没有问过的问题的答案: 所以,如果我有一个模型,要填写的标准表单和它的错误,所以我把它扔回给用户,我该如何,或者应该如何,构造代码以确保所有支持属性都被构造出来 例如: public ActionResult DoThing() { var model = new DoThingModel(); model.Things = ThingService.FetchThings(
public ActionResult DoThing()
{
var model = new DoThingModel();
model.Things = ThingService.FetchThings();
//Do Other Things
return View(model);
}
公平的标准得到行动
[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");
}
}
因此,如果事情是有效的,则重定向到success页面,否则将表单(包含在模型中)返回给用户并显示验证消息。问题是我的表单页面上有东西,我还没有用它填充模型
现在,这是一个非常简单的示例,我可以将表单中的内容传回,或者复制填充它的代码行。但是想象一下,我有一个更复杂的模型,有面包屑,多个需要填充的属性。代码复制=错误,那么在传回模型之前,我应该如何确保模型拥有我需要的一切?我曾想过创建一个服务,但它是一个只有一个功能的服务。我曾考虑过使用构造函数,但这对模型绑定不起作用。我曾想过创建一个DoThingModel.Init()来完成所有的工作,但将这样的代码放在模型类中似乎有点脏。我在控制器中使用了一个私有函数,它填充了所有必需的属性,但这似乎又脏了
我觉得应该有一个标准的代码模式,即=>创建新模型=>确保模型具有支持页面的所有内容=>返回模型=>验证模型=>重新应用任何属性=>返回模型=>重复直到有效
正如我在介绍中所说,这肯定是某个地方的标准问题,但我找不到它。你不会找到这个问题的“标准”答案。。。这完全取决于您的模型和应用程序。就你提出的选择而言,它们似乎是合理的。我不知道为什么你不想使用服务,因为“它只做一件事”——这是fineService,一件事看起来很好,除了在我之后看这个的人必须打开另一个类来看看发生了什么,这似乎是一个不必要的复杂问题。但我要说,这似乎是最干净的方法。