C# · 12月 22, 2021

c# – MVC控制器和业务逻辑之间的区别(3层)

我一直试图在ASP.NET中找到MVC和3层架构之间的差异.我之前提到过一些先前的问题和一些页面,但可以找到一个明确的答案.
这是一个关于MVC实现的msdn页面: http://msdn.microsoft.com/en-us/library/ff647462.aspx

考虑一下,我这个代码:
单页面的aspx UI和代码

<%@ Import Namespace=”System.Data” %><%@ Import Namespace=”System.Data.sqlClient” %><html> <head> <title>start</title> <script language=”c#” runat=”server”> void Page_Load(object sender,System.EventArgs e) { String selectCmd = “select * from Recording”; sqlConnection myConnection = new sqlConnection( “server=(local);database=recordings;Trusted_Connection=yes”); sqlDataAdapter myCommand = new sqlDataAdapter(selectCmd,myConnection); DataSet ds = new DataSet(); myCommand.Fill(ds,”Recording”); recordingSelect.DataSource = ds; recordingSelect.DataTextField = “title”; recordingSelect.DataValueField = “id”; recordingSelect.DataBind(); } </script> </head> <body> <asp:dropdownlist id=”recordingSelect” runat=”server” /> <asp:button runat=”server” text=”Submit” OnClick=”SubmitBtn_Click” /> </form> </body></html>

现在,考虑我有不同的文件
—-查看和代码隐藏加密—-
的.aspx

<%@ Page language=”c#” Codebehind=”Solution.aspx.cs” AutoEventWireup=”false” Inherits=”Solution” %><html> <asp:dropdownlist id=”recordingSelect” runat=”server” /> </form> </body></html>

.aspx.cs

using System;using System.Data;using System.Data.sqlClient;public class Solution : System.Web.UI.Page{ private void Page_Load(object sender,System.EventArgs e) { if(!IsPostBack) { String selectCmd = “select * from Recording”; sqlConnection myConnection = new sqlConnection( “server=(local);database=recordings;Trusted_Connection=yes”); sqlDataAdapter myCommand = new sqlDataAdapter(selectCmd,myConnection); DataSet ds = new DataSet(); myCommand.Fill(ds,”Recording”); recordingSelect.DataSource = ds; recordingSelect.DataTextField = “title”; recordingSelect.DataValueField = “id”; recordingSelect.DataBind(); } }

>在Controller类中看到上面的msdn page link,我无法分辨业务逻辑(对于3层架构中的中间层而言类似)和控制器之间的区别.
> 3层和MVC完全不同吗? Visual Studio中的ASP.NET应用程序是否已经以MVC格式分隔文件?如果这些没有什么不同,哪一个是首选的风格?
>如果.aspx和.aspx.cs已经加入,那么MVC框架是什么呢?

解决方法 我实际上对这一段时间感到不安,有关于如何正确实现它的不同哲学,所以这就是我用自己的方式理解我如何理解所涉及的不同事物之间的关系(模型/视图/控制器/业务逻辑) ):

>意见
拥有所有Html / jQuery代码,它们使用来自控制器的Model实例形式的数据
>模特
包含View需要呈现的信息的类(产品列表等)
>控制器

>他们接收传入的请求
>进行必要的准备(参数提取等)以调用您的实际业务逻辑代码.
>然后调用业务逻辑代码并检索结果
>然后他们获取结果并将其转换为UI理解的模型

>业务逻辑
这是你的实际业务逻辑代码,调用db等.我的眼睛这完全独立于整个MVC的事情,事实上它甚至不知道它是从MVC Web应用程序执行的.通常我们将它放在一个不同的程序集(类库)中,以确保根本不依赖于MVC代码.
这使得仅对业务逻辑进行单元测试变得非常简单,因为MVC没有依赖性.

我已经看到了其他方法,其中业务逻辑实际上被放入控制器,但在我看来,它失败了目的.我们没有构建MVC应用程序以获得良好的结构,但也能够更好地执行单元测试.

回到你的问题,它是如何与ASP.NET 3层架构相关的.
可以说基本上整个MVC Web应用程序不再是Presentation层(使用Busines层连接Presentation层).

其他层保持独立且独立于表示层,就像之前应该具有的那样.