对asp.net三层架构的理解

已经到新的工作岗位上有3个星期的时间了,现在跟了一个某保险公司的OA系统的项目,这时才体会什么是真正意义上的三层架构,什么才叫系统,什么才叫项目。来这个公司以前,虽然自己也做过asp.net的小项目,以为在app_code里加几个类就是三层架构了,可现在再拿那些项目来看,真的相差很远……(当然,这篇文章只是我个人的理解,肯定有不足之处,还请高手多多指点)

下面只以我现在跟的那个OA系统作为实例来分析一下。

既然是三层,肯定在物理逻辑上就要进行区分的,因此在项目文件夹下,有WebUI、BLL、DAL、Common这四个文件夹和Default.aspx等首页文件,其实最主要的就是前三个文件夹,Common文件夹里保存了一些样式文件和JS文件,个人感觉这些文件可以放到WebUI里的。o(∩_∩)o...,这几个文件夹用来作什么应该从命名上能看出来吧?WebUI用来保存页面文件,也就是大家在浏览网页的时候能看见的,最直观的,也是这三层中最简单的;BLL用来保存业务逻辑,起到一个承上启下的作用,用来连接WebUI层和DAL层,主要是定义一些方法,相对来讲比WebUI要复杂;DAL文件夹主要是保存对数据库操作的一些文件,主要是对一些SQL语句(存储过程)的执行。这三层之间的关系是上层引用下层,即WebUI引用BLL,BLL引用DLL。这三层联系起来就是这样一个过程:在页面添加一些信息经过合理性判断(WebUI)后调用BLL层的函数(方法),下面的代码属于WebUI层

             int  intUserID  =  ( int ) this .LogonUser.User_Emp.Rows[ 0 ][ " UserId " ]; // 获得当前登陆用户的ID
            DataSet ds  =  contractRule.GetContractList_By_ApplicantID( intUserID, flag, rentName, startDate, endDate, isOpen );//其中GetContractList_By_ApplicantID()就是ContractRule.cs(BLL层)中的一个方法
            ds.Tables[
0 ].DefaultView.Sort  =  ViewState[ " Sort " ].ToString();
            
this .dgPayment.DataSource  =  ds.Tables[ 0 ].DefaultView;
            
this .dgPayment.DataKeyField  =   " ContractID " ;
            
this .dgPayment.DataBind();
在ContractRule.cs页面根据传过来的数据再调用ContractDA.cs(DLL层)的方法,下面的代码属于BLL层
         /// <summary>
        
/// 根据用户获得合同信息
        
/// </summary>
        
/// <param name="intApplicantID"></param>
        
/// <param name="flag"></param>
        
/// <param name="contractName"></param>
        
/// <param name="dtBeginDate"></param>
        
/// <param name="dtEndDate"></param>
        
/// <returns></returns>

         public  DataSet GetContractList_By_ApplicantID( int  intApplicantID,  int  flag,  string  contractName, DateTime dtBeginDate, DateTime dtEndDate,  bool  isOpen)
        
{
            
using( ContractDA contractDA = new ContractDA() )
            
{
                
return contractDA.GetContractList_By_ApplicantID( intApplicantID,flag,contractName,dtBeginDate,dtEndDate,isOpen);//其中GetContractList_By_ApplicantID()是ContractDA.cs(DLL层)页面中的一个方法
           }
        }
在ContractDA.cs页面中的GetContractList_By_ApplicantID()方法根据传入的信息,通过SQL语句(存储过程)来进行对数据库的操作。下面的代码属于DAL层
         /// <summary>
        
/// 根据用户获得合同信息
        
/// </summary>
        
/// <param name="intApplicantID"></param>
        
/// <param name="flag"></param>
        
/// <param name="contractName"></param>
        
/// <param name="dtBeginDate"></param>
        
/// <param name="dtEndDate"></param>
        
/// <returns></returns>

         public  DataSet GetContractList_By_ApplicantID( int  intApplicantID,  int  flag,  string  contractName, DateTime dtBeginDate, DateTime dtEndDate,  bool  isOpen)
         {
            SqlCommand  command 
= new SqlCommand();

            command.CommandText 
= "Contract_Query";//存储过程名
            command.Connection 
= this.mySqlConnection;
            command.CommandType 
= CommandType.StoredProcedure;

            command.Parameters.Add( 
"@ApplicantID", intApplicantID );//传入参数
            
//tg070712
            command.Parameters.Add( "@Flag", flag );/传入参数
            command.Parameters.Add( 
"@ContractName", contractName );/传入参数
            command.Parameters.Add( 
"@BeginDate", dtBeginDate );/传入参数
            command.Parameters.Add( 
"@EndDate", dtEndDate );/传入参数

            
this.mySqlDataAdapter.SelectCommand = command;
            
            DataSet ds 
= new DataSet();
            
this.mySqlDataAdapter.Fill( ds );
            
return ds;//返回ds数据集
        }

 

至此,一个三层意义上的数据流转过程就完成了。因为自己入门不是很深,所以上面的想法未免有纰漏,还请各路高手指点。

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值