我必须启动一个业务应用程序项目。我打算使用MVC5,实体框架数据库第一种方法。
我的问题是我们必须编写以下逻辑吗?
验证逻辑(数据注释/远程验证/自定义验证等) - > Model?,ViewModel?或控制器?
业务逻辑(CURD操作,自定义验证功能/方法,下拉列表/网格填充等功能) - > Model?,ViewModel?或控制器?
注意: - EntityFrameWork生成的类在数据库第一种方法中无法编辑,在远程验证属性中,我们必须指定控制器中存在的方法名称
答案 0 :(得分:1)
验证逻辑 - 属于模型,数据注释应用于此目的 - http://msdn.microsoft.com/en-us/library/ee256141(VS.100).aspx。最好将验证逻辑放在模型中的原因是它允许您使用验证逻辑来定位所有实例。例如。如果你有5个使用特定模型的Controller动作,你只需要更新模型中的验证逻辑(而不是5个单独的动作方法)。
然而,回到你的陈述:
注意: - EntityFrameWork生成的类无法在其中进行编辑 数据库第一种方法,在远程验证属性中我们必须 指定控制器中存在的方法名称
我可以看到您来自哪里,因为只要EntityFramework / T4模板重新生成生成的类,您的数据注释就会被删除。
假设这是你的意思,我建议你看看这里描述的EF MetaData类(参见添加元数据类标题): http://www.asp.net/mvc/tutorials/mvc-5/database-first-development/enhancing-data-validation
这些有助于通过将每个字段的DataAnnotations与Model分开来解决此特定情况。
我可以看到将验证DataAnnotations添加到ViewModels的情况。
E.g。如果你想拥有一个包含5个字段的Model,但只允许其中3个绑定到Controller,你可以创建一个只包含要绑定的字段的ViewModel(例如,以避免' Overposting' /& #39; Mass Assignment')然后设置适当的DataAnnotation属性。缺点是您可以在多个位置指定验证逻辑,因此请考虑尽可能使用 [Bind(Exclude =" field1,field2")] 属性 - 见http://www.pluralsight.com/training/player?author=scott-allen&name=mvc4-building-m5-data-ii&mode=live&clip=5&course=mvc4-building
业务逻辑 - CRUD操作绝对属于Controller。您甚至可能希望将CRUD操作方法分离到单独的存储库层,如下所述:http://www.asp.net/mvc/tutorials/getting-started-with-ef-5-using-mvc-4/implementing-the-repository-and-unit-of-work-patterns-in-an-asp-net-mvc-application
在获取编辑器数据(下拉列表等)方面:如果您计划重复使用控件,请考虑编写编辑器模板,如下所述:http://www.codeproject.com/Articles/672591/Exploring-Display-and-Editor-Templates-in-ASP-NET
编辑:这是创建自定义' HoursOfTheDay'编辑模板并通过[UIHint("HoursOfTheDay")]
DataAnnotation - http://www.devcurry.com/2013/04/custom-templates-in-aspnet-mvc.html 使用此模板
否则,我可能会将此数据(例如您的选项列表)从Controller加载到ViewModel或Model中。
自定义验证属于模型或模型MetaData类中的自定义验证DataAnnotation,如下所述:http://www.pluralsight.com/training/player?author=scott-allen&name=mvc4-building-m5-data-ii&mode=live&clip=7&course=mvc4-building
希望能回答你的问题。
顺便说一句,整个Pluralsight课程非常好(也是免费的):http://www.pluralsight.com/courses/mvc4-building
答案 1 :(得分:0)
在模型中你必须编写你的类。 在视图中,您必须编写您的设计。 在控制器中,您必须编写逻辑编码。
在MVC视图中,您可以编写内联编码。所以你也可以在视图中编写你的代码。 有两种类型的视图,我更喜欢Razor视图。
示例:
在模型中(名称:mymodel):
public class mymodel
{
public string myname {get; set;}
}
在视图中(名称:firstproj):
@model myproject.mymodel
<html>
<div>@Model.myname</div>
</html>
在Controller(名称:Homecontroller)中:
public ActionResult firstproj(mymodel m)
{
m.myname="Sukesh Chand";
return view(m)
}
答案 2 :(得分:0)
您应该遵循基本的MVC架构。您可以在视图模型中编写验证逻辑而不是在数据模型中。您可以在Controller中编写业务逻辑或使用控制器本身的引用。不要做复杂的架构。首先,你要正确理解你的需要,然后根据它进行设计。
答案 3 :(得分:-1)
我想你的所有逻辑都应该在模型中。视图应该只处理如何显示信息,无论信息是什么。控制器将视图链接到模型,并将信息从模型传递到视图。它还可以在需要更改显示的信息时随时处理。
我希望这会有所帮助。
修改强>
在MVVM中,实际视图直接连接到控制器。 ViewModel由模型更新,然后更新控制器。这些图像比较MVVM和MVC:
MVVM:
MVC:
Theres是一个完整的article,它描述了MVVM,但是在Objective-C上下文中。如果您需要进一步的帮助,请参阅它。