C# 如何在MVC中实现n层架构?
我知道以前有人问过这个问题。我这样问只是为了得到更好的解释。在我的webforms应用程序中,我就是这样实现我的项目的。该解决方案有两个项目。第一个项目包含数据访问和业务逻辑。第一个项目在第二个项目中引用。aspx.cs文件调用业务逻辑类,业务逻辑类调用数据访问类C# 如何在MVC中实现n层架构?,c#,asp.net,asp.net-mvc,C#,Asp.net,Asp.net Mvc,我知道以前有人问过这个问题。我这样问只是为了得到更好的解释。在我的webforms应用程序中,我就是这样实现我的项目的。该解决方案有两个项目。第一个项目包含数据访问和业务逻辑。第一个项目在第二个项目中引用。aspx.cs文件调用业务逻辑类,业务逻辑类调用数据访问类 我正试图在我的MVC应用程序中遵循同样的方法。我将如何实现这一点?控制器调用模型,而模型又调用业务逻辑?这种方法会增加开销,对吗 关于评论的方向,这条线索(这不适合评论): 使用新MVC项目创建的models文件夹用于视图模型-它们是
我正试图在我的MVC应用程序中遵循同样的方法。我将如何实现这一点?控制器调用模型,而模型又调用业务逻辑?这种方法会增加开销,对吗 关于评论的方向,这条线索(这不适合评论): 使用新MVC项目创建的models文件夹用于视图模型-它们是支持视图的类。这些不是您的业务模型或数据模型 例如,在支持视图的ViewModel中,您可能有一个呈现为下拉列表的enum属性:
public enum CustomerTypes
{
INDIVIDUAL = 0,
COMPANY
}
public class CustomerViewModel
{
public CustomerTypes Type { get; set; }
public string[] CustomerTypesSelectList { get; set; }
}
public class CustomerController : Controller
{
public ActionResult Edit()
{
var model = new CustomerViewModel();
model.CustomerTypesSelectList =
Enum.GetNames(typeof(CustomerTypesSelectList));
return View(model);
}
}
这样,您的视图中就有了一些javascript,可以用CustomerTypesSelectList
中的项目填充一个奇特的下拉列表
特定于用户界面的string[]
属性是ViewModel的常见构造,当它转换为业务模型或数据模型时会被剥离。控制器将控制转换(也称为映射),但可能依赖另一个类来实现将ViewModel和业务模型联系在一起的映射
总之,在n层体系结构中:
让您的体系结构具备以下功能 数据访问项目-添加带有存储库和工作单元模式的ORM/ADO.net。可以使用来自ORM的T4模板生成存储库 ViewModel项目-为Viewmodels创建单独的项目(包含视图要使用的属性) 业务层-具有包含从数据访问层访问存储库的函数的类,如果需要,使用LINQ将它们连接起来,并填充到Viewmodel中,然后将视图模型对象或视图模型集合返回给控制器 网络项目- 控制器-使用依赖项注入和返回视图模型来访问业务层函数
视图-访问控制器返回的视图模式据我所知,在MVC中,控制器和视图模型是您的业务逻辑。模型是您的数据访问。视图是您的演示逻辑。@electrillama感谢您的回复。如果遵循这种方法,我会失去代码的可重用性吗?例如,我可以在Project3的示例中使用Project1,而无需再次复制Project1功能。我如何以一种不丧失可重用性的方式实现它?我不是权威,但对我来说有意义的方式是,ViewModel只能用于存储表示层所需的信息,并与强类型视图一起使用,以便于搭建。数据层模型应该只关注数据持久性所需的表示。在这两者之间是业务层,它有自己的模型来表示业务对象。。。这是2个项目还是3个项目取决于偏好。但这只是观点,不是科学。你应该检查我的问题是的,我已经实现了这个架构,你的控制器应该称为你的业务层,你的观点是基于你的业务对象的