1. 程式人生 > >asp.net三層架構詳解

asp.net三層架構詳解

一、資料庫

複製程式碼 /*==============================================================*/
/* DBMS name:      Microsoft SQL Server 2000                    */
/*==============================================================*/
 
 
if exists (select 1
            from sysobjects
           where id = object_id('newsContent
')
            and   type = 'U')
   drop table newsContent
go
 
 
/*==============================================================*/
/* Table: newsContent                                            */
/*==============================================================*/
create table newsContent (
   ID           int
              identity(1,1)   primary key,
   Title          nvarchar(50)     not null,
   Content       ntext            not null,
   AddDate      datetime         not null,
  CategoryID    int              not null
)
go 複製程式碼

二、專案檔案架構

實現步驟為:4-3-6-5-2-1

ID

專案

描述

用途

專案引用關係

例項所需檔案

相關方法

1

Web

表現層

Web頁和控制元件

引用BLL

WebUI.aspx

WebUI.aspx.cs

GetContent()

2

BLL

業務邏輯層

業務邏輯元件

引用 IDAL,Model,使用DALFactory建立例項

Content.cs

ContentInfo GetContentInfo(int id)

3

IDAL

資料訪問層介面定義

每個DAL實現都要實現的一組介面

引用 Model

IContent.cs

ContentInfo GetContentInfo(int id)

4

Model

業務實體

傳遞各種資料的容器

無引用

ContentInfo.cs

5

DALFactory

資料層的抽象工廠

建立反射,用來確定載入哪一個資料庫訪問程式集的類

引用IDAL,通過讀取web.config裡設定的程式集,載入類的例項,返回給BLL使用。

Content.cs

IDAL.Icontent create()

6

SQLServerDAL

SQLServer資料訪問層

Microsoft SQL Server特定的Pet Shop DAL實現,使用了IDAL介面

引用 Model和IDAL,被DALFactory載入的程式集,實現接口裡的方法。

SqlHelper.cs

Content.cs

SqlDataReader ExecuteReader()

PrepareCommand()

ContentInfo GetContentInfo(int id)

OracleDAL

Oracle資料訪問層

7

DBUtility

資料庫訪問元件基礎類

GetSqlServerConnectionString得到資料庫連線字串,也可省去該專案,在SQLServerDAL.SqlHelper中用static readonly string SqlConnectionString代替。

無引用

實現步驟過程

1、建立Model,實現業務實體。

2、建立IDAL,實現介面。

3、建立SQLServerDAL,實現接口裡的方法。

4、增加web.config裡的配置資訊,為SQLServerDAL的程式集。

5、建立DALFactory,返回程式集的指定類的例項。

6、建立BLL,呼叫DALFactory,得到程式集指定類的例項,完成資料操作方法。

7、建立WEB,呼叫BLL裡的資料操作方法。

注意:

1、web.config裡的程式集名稱必須與SQLServerDAL裡的輸出程式集名稱一致。

2、DALFactory裡只需要一個DataAccess類,可以完成建立所有的程式集例項。

3、專案建立後,注意修改各專案的預設名稱空間和程式集名稱。

4、注意修改解決方案裡的專案依賴。

5、注意在解決方案裡增加各專案引用。

三、各層間的訪問過程

1、傳入值,將值進行型別轉換(為整型)。

2、建立BLL層的content.cs物件c,通過物件c訪問BLL層的方法GetContentInfo(ID)呼叫BLL層。

3、BLL層方法GetContentInfo(ID)中取得資料訪問層SQLServerDAL的例項,例項化IDAL層的介面物件dal,這個物件是由工廠層DALFactory建立的,然後返回IDAL層傳入值所查詢的內容的方法dal.GetContentInfo(id)。

4、資料工廠通過web.config配置檔案中給定的webdal字串訪問SQLServerDAL層,返回一個完整的呼叫SQLServerDAL層的路徑給 BLL層。

5、到此要呼叫SQLServerDAL層,SQLServerDAL層完成賦值Model層的物件值為空,給定一個引數,呼叫SQLServerDAL層的SqlHelper的ExecuteReader方法,讀出每個欄位的資料賦值給以定義為空的Model層的物件。

6、SqlHelper執行sql命令,返回一個指定連線的資料庫記錄集,在這裡需要引用引數型別,提供為開啟連線命令執行做好準備PrepareCommand。

7、返回Model層把查詢得到的一行記錄值賦值給SQLServerDAL層的引入的Model層的物件ci,然後把這個物件返回給BLL。

8、回到Web層的BLL層的方法呼叫,把得到的物件值賦值給Lable標籤,在前臺顯示給介面

四、專案中的檔案清單

1、DBUtility專案

(1)connectionInfo.cs

複製程式碼 using System;
using System.Configuration;
 
namespace Utility
{
       ///<summary>/// ConnectionInfo 的摘要說明。
       
///</summary>       public class ConnectionInfo
       {
              public static string GetSqlServerConnectionString()
              {
                     return ConfigurationSettings.AppSettings["SQLConnString"];
              }
       }
} 複製程式碼

2、SQLServerDAL專案

(1)SqlHelper.cs抽象類

複製程式碼 using System;
using System.Data;
using System.Data.SqlClient;
using DBUtility;
 
namespace SQLServerDAL
{
       ///<summary>/// SqlHelper 的摘要說明。
       
///</summary>       public abstract class SqlHelper
       {
              public static readonly string CONN_STR = ConnectionInfo.GetSqlServerConnectionString();
 
              ///<summary>/// 用提供的函式,執行SQL命令,返回一個從指定連線的資料庫記錄集
              
///</summary>///<remarks>/// 例如:
              
/// SqlDataReader r = ExecuteReader(connString, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24));
              
///</remarks>///<param name="connectionString">SqlConnection有效的SQL連線字串</param>///<param name="commandType">CommandType:CommandType.Text、CommandType.StoredProcedure</param>///<param name="commandText">SQL語句或儲存過程</param>///<param name="commandParameters">SqlParameter[]引數陣列</param>///<returns>SqlDataReader:執行結果的記錄集</returns>              public static SqlDataReader ExecuteReader(string connString, CommandType cmdType, string cmdText, params SqlParameter[] cmdParms)
              {
                     SqlCommand cmd = new SqlCommand();
                     SqlConnection conn = new SqlConnection(connString);
 
                     // 我們在這裡用 try/catch 是因為如果這個方法丟擲異常,我們目的是關閉資料庫連線,再丟擲異常,
                     
// 因為這時不會有DataReader存在,此後commandBehaviour.CloseConnection將不會工作。                     try
                     {
                            PrepareCommand(cmd, conn, null, cmdType, cmdText, cmdParms);
                            SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
                            cmd.Parameters.Clear();
                            return rdr;
                     }
                     catch
                     {
                            conn.Close();
                            throw;
                     }
              }
 
 
              ///<summary>/// 為執行命令做好準備:開啟資料庫連線,命令語句,設定命令型別(SQL語句或儲存過程),函式語取。
              
///</summary>///<param name="cmd">SqlCommand 元件</param>///<param name="conn">SqlConnection 元件</param>///<param name="trans">SqlTransaction 元件,可以為null</param>///<param name="cmdType">語句型別:CommandType.Text、CommandType.StoredProcedure</param>///<param name="cmdText">SQL語句,可以為儲存過程</param>///<param name="cmdParms">SQL引數陣列</param>              private static void PrepareCommand(SqlCommand cmd, SqlConnection conn, SqlTransaction trans, CommandType cmdType, string cmdText, SqlParameter[] cmdParms)
              {
 
                     if (conn.State != ConnectionState.Open)
                            conn.Open();
 
                     cmd.Connection = conn;
                     cmd.CommandText = cmdText;
 
                     if (trans != null)
                            cmd.Transaction = trans;
 
                     cmd.CommandType = cmdType;
 
                     if (cmdParms != null)
                     {
                            foreach (SqlParameter parm in cmdParms)
                                   cmd.Parameters.Add(parm);
                     }
              }
       }
} 複製程式碼

(2)Content.cs類

複製程式碼 using System;
using System.Data;
using System.Data.SqlClient;
using Model;
using IDAL;
 
namespace SQLServerDAL
{
       ///<summary>/// Content 的摘要說明。
       
///</summary>       public class Content:IContent 
       {
 
              private const string PARM_ID = "@ID";
              private const string SQL_SELECT_CONTENT = "Select ID, Title, Content, AddDate, CategoryID From newsContent Where ID = @ID";
 
 
              public ContentInfo GetContentInfo(int id)
              {
                     //創意文章內容類                     ContentInfo ci = null;
 
                     //建立一個引數                     SqlParameter parm = new SqlParameter(PARM_ID, SqlDbType.BigInt, 8);
                     //賦上ID值                     parm.Value = id;
 
                     using(SqlDataReader sdr = SqlHelper.ExecuteReader(SqlHelper.CONN_STR, CommandType.Text, SQL_SELECT_CONTENT, parm))
                     {
                            if(sdr.Read())
                            { 
                                   ci = new ContentInfo(sdr.GetInt32(0),sdr.GetString(1), sdr.GetString(2),
                                          sdr.GetDateTime(3), sdr.GetInt32(4), sdr.GetInt32(5), sdr.GetString(6));
                            }
                     }
                     return ci;
              }
       }
} 複製程式碼

3、Model專案

(1)contentInfo.cs

複製程式碼 using System;
 
namespace Model
{
       ///<summary>/// Class1 的摘要說明。
       
///</summary>       public class ContentInfo
       {
              private int _ID;
              private string _Content;
              private string _Title;
              private 

相關推薦

asp.net架構

一、資料庫 /*==============================================================*/ /* DBMS name:      Microsoft SQL Server 2000         

asp.net架構連線Oracle 11g

asp.net三層架構連線Oracle 11g 連線Oracle時使用微軟的Oracle連線元件; 一 DAL層 using System; using System.Collections.Generic; using System.Text; using System

Java Web 架構

王飛翔_ java 三層架構ssh 一個spring2.5+hibernate3.2+struts2.0組合框架,使用spring的 IoC來管理應用的 所有bean,包括struts2的 action,充分發揮了spring輕量級框架的 優勢。  摘 要:

JavaWeb架構

什麼是三層架構? 三層架構(3-tier architecture) 通常意義上的三層架構就是將整個業務應用劃分為:介面層(User Interface layer)、業務邏輯層(Business Logic Layer)、資料訪問層(Data access layer

VS2010構建ASP.NET架構例項演示(一)

開發環境:vs2010+SQLSERVER2008 功能:簡單實現顯示一張表的記錄。 具體步驟:       1、開啟sql server2008,在裡面建立資料庫名為halfcool,然後在資料庫建立users表,裡面有三個欄位id(自動增加),username(

VS2010構建ASP.NET架構例項演示(

8、業務層(Bll),針對具體問題的操作,也可以說是對資料層的操作,對資料業務邏輯處理。 建立的方法同上。名稱為Bll;解決方案:新增到解決方案;路徑為e:\test\Solution1;然後將Bll目錄下面的class1.cs改名為UserBll.cs了。這層要引用Da

C#架構--以系統登入為例

引言         通常意義上的三層架構是將真個業務應用劃分為:介面層(UI層)、業務邏輯層(B層)、資料訪問層(D層)。對於複雜的系統分層讓結構清晰,便於開發人員對系統進行整體的理解、把握;而且便於維護,系統基本的架構可以通過工具自動生成程式碼。當資料庫發生改變時,只用

ASP.NET 架構技術 人力資源管理系統專案HR (深入WebServic

白菜價, 想要的聯絡QQ:867635458,非誠勿擾! ASP.NET MVC Linq 技術  企業級通用OA系統  全程開發  大型企業級別OA專案實戰全新上線啦!本專案由小孔子講師全程錄製。小孔子老師大家都很熟悉了,他所錄製的其他課程都受到了學員的一致好

ASP.NET開發】.NET架構簡單解析

這篇文章本來應該很早就寫出來的,但是一直苦於自己的精神能力有限,而且已經到了我們學校的考試周,所以時間上還是有點緊迫。關鍵的一點就是,找不到合理的思路來寫,思路沒有的話,就算是再好的素材,也寫不來大家喜歡的文章。 之前已經寫過關於.NET三層架的兩篇文章了,一篇是《【ASP

Asp.Net MVC3 簡單入門過濾器Filter

添加 重復 權限 組件 再次 ace text ext 開發 前言 在開發大項目的時候總會有相關的AOP面向切面編程的組件,而MVC(特指:Asp.Net MVC,以下皆同)項目中不想讓MVC開發人員去關心和寫類似身份驗證,日誌,異常,行為截取等這部分重復的代碼,那我們可以

asp.net程序發布

存在 mage com 環境 整體 cnblogs 配置 轉載 系列 本文轉載自Alan_beijing的博客ASP.NET 程序發布詳細過程。內容進行了部分更改。 ASP.NET網站的發布,無論是初學者還是高手,在程序的發布過程中或多或少會存在一些問題,譬如VS發布AS

經典ASP NET MVC3 0入門

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Asp.net中GridView使用(引)

GridView無程式碼分頁排序 GridView選中,編輯,取消,刪除 GridView正反雙向排序 GridView和下拉選單DropDownList結合 GridView和CheckBox結合 滑鼠移到GridView某一行時改變該行的背景色方法一 滑鼠移到GridView某一行時改變該

B/S系統MVC與結構

我們平時總是將三層架構與MVC混為一談,殊不知它倆並不是一個概念。 下面我來為大家揭曉我所知道的一些真相。 首先,它倆根本不是一個概念。 三層架構是一個分層式的軟體體系架構設計,它可適用於任何一個專案。 MVC是一個設計模式,它是根據專案的具體需求來決定是否適

ASP.NET MSChart 入門 Series (四)

///<summary> ///定義Series適用大部分圖形樣式------不適合樣式有、餅圖、空心餅圖等 ///</summary> ///<param name="

.net架構開發步驟

City城市表,id ,name,password,address,phone; 1.新建一個windows窗體應用程式,CitySys 2.檔案–》新增–》新建專案–》類庫(CitySysModel)–》重新命名class1.cs的類(CityModel)。 3.根據資料表裡面的欄位,

Asp.Net MVC3 簡單入門過濾器Filter(身份驗證、快取、防盜鏈、國際化等)

下面我們說幾個系統的Filter三、AcceptVerbs規定頁面的訪問形式,如 [AcceptVerbs(HttpVerbs.Post)]public ActionResult Example(){return View(); }頁面只能以Post形式訪問,即表單提交。四、Ac

.NET架構

零基礎學C#3.0 -- .net的三層架構 - CodingPenguin 時間 2014-01-26 17:40:00 部落格園-所有隨筆區 原文  http://www.cnblogs.com/codingpenguin/p/3534304.html 主題 .N

ASP.net連線Mysql資料庫

1、資源:Mysql-5.6.24-win32、VS2013、mysql-connector-odbc-5.3.6-win32; 2、ODBC下載:在Mysql官網可下載Mysql ODBC,注意,什麼版本的mysql配什麼版本的ODBC,很重要! 下載後雙擊安裝。 3、

.NET 架構

Connection : 用於連線資料庫命令. Command : 執行鍼對資料庫的SQL命令. ExecuteScalar() : 返回第一行第一列的值(object型別). ExecuteNonQuery() : 返回執行命令後受到影響的行數(int型別). ExecuteReade