use*_*679 6 c# asp.net-mvc 3-tier
我一直试图在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>
Run Code Online (Sandbox Code Playgroud)
现在,考虑我有
---- View和Code-behind spearated ---- .aspx的不同文件
<%@ Page language="c#" Codebehind="Solution.aspx.cs"
AutoEventWireup="false" Inherits="Solution" %>
<html>
<asp:dropdownlist id="recordingSelect" runat="server" />
</form>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
.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();
}
}
Run Code Online (Sandbox Code Playgroud)
Controller类,我不能够辨别业务逻辑之间(那会是在一个3层架构的中间层相似)和控制器的区别.我实际上对这一段时间感到不安,有关于如何正确实现它的不同哲学,所以这就是我用自己的方式理解我如何理解所涉及的不同事物之间的关系(模型/视图/控制器/业务逻辑) ):
Model来自控制器的实例形式的数据我已经看到了其他方法,其中业务逻辑实际上被放入控制器,但在我看来,它失败了目的.我们没有构建MVC应用程序以获得良好的结构,但也能够更好地执行单元测试.
回到你的问题,它是如何与ASP.NET 3层架构相关的.
可以说基本上整个MVC Web应用程序不再是Presentation层(+使用Busines层连接Presentation层).
其他层保持独立且独立于表示层,就像之前应该具有的那样.
MVC 和 3-tier 是完全不同的东西。
我看到很多人将两者混淆,因为两者都有 3 个部分。
MVC是一种UI 模式:
视图:仅包含 html 和 js(在 Web 项目的情况下)
控制器:是 UI(= 视图)和后端(= 模型)之间的一种中介
模型:这个是域对象以及业务和数据访问逻辑所在的位置
3层关注整个的你的应用程序:
UI:包含HTML / JS以及页面背后的代码。
这里绝对没有逻辑,除了UI代码和调用业务层。
业务层:这是您放置计算、条件、验证等内容的地方,
因此您的应用程序的实际行为。这里没有数据访问代码。
数据访问:在这里您与数据库对话并将数据返回到业务层。
没有别的,业务层应该知道如何处理它。
因此,如果您将两者结合起来,您将获得:
UI:视图和控制器
业务层:模型的
一部分数据访问:模型的一部分
域对象:您需要放置正在使用的对象(产品、订单,..)在一个单独的层。
这也是模型的一部分。
有问题就拍!
| 归档时间: |
|
| 查看次数: |
4904 次 |
| 最近记录: |