用ASP.NET編寫多層架構的系統

來源:互聯網
上載者:User
千萬不要被標題嚇倒,其實很簡單。不然只能一輩子寫麵條式的程式了。特別是ASP程式員大多寫都是3 IN 1 (超白金版:P)的程式,勉強能寫成分層式的也是高手中的高手,這種大蝦估計早就轉型當系統分析員了。

一般來說系統大多分為三層(據說分三層很好):使用者層、邏輯層、資料層。也可能不叫這幾個名字,但是不管怎麼說功能大體應該一樣。說到功能請看下面

使用者層:就是主要與使用者打交道,也就是使用者介面。什麼輸入框啊、提示資訊啊的都在上面。因為使用者對於系統而言都是foolish使用者(不是使用者都是fool,而是商務邏輯、資料關係不是每個使用者都能瞭解的,如果都能瞭解就可以不用寫程式,直接讓使用者操作資料庫就好了),你不得不在這個層面上做出諸多限制和提示以便使用者能正確的資料輸入。這個層面一般都是未經處理資料採集以及資料最終的輸出目標。這個就像一個商品的封裝一樣是給別人看的。跟商務邏輯資料處理沒多大關係,不參與邏輯運算資料處理,說白了只能看啊!有人說了不是還有輸入框嗎?那不是只看啊?其實能輸入框只是邏輯層的外延。因為邏輯層沒有使用者介面,只能依靠別人了。就像釣魚,鉤子就是使用者層是用來看的,魚杆、魚線和繞線器還有釣魚的人是邏輯層。魚簍就是資料層了(不是很形象將就著用拉)。

邏輯層:是背地裡進行的,使用者毫無所知。系統要做的判斷啊、截斷未經處理資料啊、對未經處理資料進行算術運算啊、輸出錯誤資訊到使用者層啊等等的。也就是說,使用者輸入“ABC”邏輯層要做的是,判斷“ABC”是否符合商務邏輯需要,是則繼續否則就是非法資料。邏輯層還要決定是提取“ABC”的“A”還是提取“B”傳給資料層以保證資料層的正確運行。當然邏輯層還幹很多事就不一一羅嗦了。當邏輯層完成了所有資料的處理判斷,她就資料傳遞給資料層。

資料層:這裡是跟資料庫打交道,對於傳入的資料,資料層決定寫入還是添加到資料表中,添加到A表還是B表中。完成了返回成果或者錯誤資訊或者資料集合給邏輯層。他就算完事了,其他什麼都管。

好了介紹完了(一頭汗啊:~)現在說好處,最典型的例子就是當商務邏輯發生變動的時候,只需要修改邏輯層就可以了其他各層不必改動。比如原來商務邏輯要求把使用者輸入的A加上B得數存入資料庫。後來商務邏輯變了要求A減去B得數存入資料庫。這時候就只需要修改商務邏輯層了。還有當資料庫表欄位類型變了,如果沒有分層的話要把所有代碼翻出來看那裡用到這個欄位,都要改(改完出錯不出錯那就不可知了)。有分層就簡單了,對邏輯層傳入的資料直接轉類型就好了,一切照舊。真是居家旅遊、殺人放火必備啊~~~:)

說了這麼多到底怎麼做才算是分層了?下面寫個小例子

其實用.NET的就直接分了層了,使用者介面和邏輯資料兩層。
建立一個新項目,建立一個名為TEST.ASPX的檔案。建立一個名為DBTEST.CS的類。開啟TEST.ASPX成如下樣子
<%@ Page language="c#" Codebehind="test.aspx.cs" AutoEventWireup="false" Inherits="MovieAdmin.test" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>test</title>
<meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
<meta name="CODE_LANGUAGE" Content="C#">
<meta name="vs_defaultClientScript" content="JavaScript">
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
</HEAD>
<body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" runat ="server">
  <asp:TextBox id="TextBox1" style="Z-INDEX: 101; LEFT: 296px; POSITION: absolute; TOP: 104px"
  runat ="server"></asp:TextBox>
  <asp:TextBox id="TextBox2" style="Z-INDEX: 102; LEFT: 296px; POSITION: absolute; TOP: 136px"
  runat ="server"></asp:TextBox>
  <asp:Button id="Button1" style="Z-INDEX: 103; LEFT: 504px; POSITION: absolute; TOP: 120px" runat ="server"
  Text="Button"></asp:Button>
</form>
</body>
</HTML>

就是兩個文字框一個提交按紐

開啟TEST.CS(就是查看TEST.ASPX的代碼)
寫如下

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

namespace MovieAdmin
{
/// <summary>
/// test 的摘要說明。
/// </summary>
public class test : System.Web.UI.Page
{
protected System.Web.UI.WebControls.TextBox TextBox1;
protected System.Web.UI.WebControls.TextBox TextBox2;
protected System.Web.UI.WebControls.Button Button1;

private void Page_Load(object sender, System.EventArgs e)
{
  // 在此處放置使用者代碼以初始化頁面
}

#region Web Form設計器產生的程式碼
override protected void OnInit(EventArgs e)
{
  //
  // CODEGEN: 該調用是 ASP.NET Web Form設計器所必需的。
  //
  InitializeComponent();
  base.OnInit(e);
}

/// <summary>
/// 設計器支援所需的方法 - 不要使用代碼編輯器修改
/// 此方法的內容。
/// </summary>
private void InitializeComponent()
{  
  this.Button1.Click += new System.EventHandler(this.Button1_Click);
  this.Load += new System.EventHandler(this.Page_Load);

}
#endregion

private void Button1_Click(object sender, System.EventArgs e)
{
  string text1 = TextBox1.Text.Trim();
  string text2 = TextBox2.Text.Trim();
  string text3 = text1 + test2;
  dbtext td = new dbtext();
  td.insert(text3);
}
}
}
再寫DBTEST.CS類為如下
using System;
using System.Data.SqlClient;

namespace MovieAdmin
{
/// <summary>
/// dbtext 的摘要說明。
/// </summary>
public class dbtext
{
public dbtext()
{
  //
  // TODO: 在此處添加建構函式邏輯
  //
}
public string insert(string tempstr)
{
  SqlConnection Conn = DB.DBOpen() ;
  strSQL = "insert into [table](aaa) values('"+tempstr+"')" ;
  PubLib.DB.DBExecute(Conn, strSQL) ;
  Conn.Close();

  return "成功" ;
}
}
}

現在大功告成,恭喜你終於寫出了一個毫無用處的分層式程式。:P
這個只是一個粉簡單的例子,結構的表示。真正應用還有很多套路,我也在摸索中....
有什麼問題留言吧,不過別指望太多,我也是半桶水:P

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.