假如网站现在有一个页面search.aspx,里面有一个文本输入框,用户输入文本后,然后点搜索,提交到服务器。服务器的search.aspx.cs里面有一段程序代码,判断来自客户端进行搜索的字符是否为空,如果不为空,就实例化DAL层的一个SearchInfo类,并且执行SearchInfo对象的一个方法,返回一个DataTable,之后进行数据绑定。if(searchKey.ToString!=""){
   SearchInfo Si= New SearchInfo()
   DataTable DtSearch = Si.GetListByKey(searchKey.ToString) 
  //数据绑定...........
}
由上例子我们看出,实际的程序逻辑代码不都是在search.aspx.cs里进行处理的吗?那么 search.aspx.cs是不是就是属于第2层业务层呢?
可能这种理解是不正确的,那么请问大家,到底什么是业务层呢?我在网上下载的源码中有好几个文件夹 ,比如DAL文件夹   这个层就是封装数据库里的一些操作,这个好理解。还有一个MODEL文件夹  这个层里面都是进行的一些类的构建,里面定义有一些和数据库的字段名一样的 私有成员变量。比如一个新闻类里面有标题,内容,添加时间等等。比如news类
private int _id;
private string _author;
private DateTime _add_time;
                //...............

public int id
{
set{ _id=value;}
get{return _id;}
}

public string author
{
set{ _author=value;}
get{return _author;}
}

                public DateTime add_time
{
set{ _last_time=value;}
get{return _last_time;}
}                .............然后在添加新闻的addNews.aspx.cs页面里面先实例化新闻类
Model.news objInfo=new Model.news();然后得到页面传来的参数
                        
author = Request.Form["author"].ToString;
........之后赋值给刚刚实例化的news类对象 objInfo.author=author
objInfo.add_time=add_time
objInfo.content=content
                        .............然后再调用DAL空间中news类的add方法,model中的news类的定义方法为
public int Add(FormNoticeInfo model)
{
SqlParameter[] parameters = {
new SqlParameter("@id", SqlDbType.Int,4),

new SqlParameter("@title", SqlDbType.VarChar,100),
new SqlParameter("@author", SqlDbType.VarChar,50),
new SqlParameter("@create_time", SqlDbType.DateTime),
new SqlParameter("@content", SqlDbType.Text)};
parameters[0].Direction = ParameterDirection.Output;
parameters[1].Value = model.title;
parameters[2].Value = model.author;
parameters[3].Value = model.create_time;
parameters[4].Value = model.content; SqlHelper.ExecuteNonQuery(Db.MyStaticConn(), CommandType.StoredProcedure, sp_Add, parameters);

return (int)parameters[0].Value;
}
在这里我有个疑问,为什么非要多此一举的多加一个model类呢,我们直接在DAL的add方法中直接写入一系列的参数来接受数据不行吗?事例化一个对象肯定又要多增加开销,影响程序运行的效率。那么假如现在我们只有DAL层,没有MODEL层,直接在DAL的add方法中写入一系列的参数,然后传递参数添加新闻,这还叫不叫三层架构?三层架构的第2层到底是那个层呢?另外请问Utility,BLL 都放什么文件,有什么作用?

解决方案 »

  1.   

    Web 表现层
    BLL 业务逻辑层
    IDAL 数据访问层接口定义
    DBUtility 数据库访问组件基础类
    DALFactory 数据层的抽象工厂
     
      

  2.   

    能说下在ASP.NET项目开发中到底对应的是那一部分文件吗.cs文件?
      

  3.   

    比如销售商品的打折就放在逻辑层......
    销售商品的打折代码放那里,.asp.cs中?那.cs文件就叫第2层?
      

  4.   


    数据库访问层:与业务隔离、封装了对数据库的操作
    业务逻辑层:DAL层的一个SearchInfo类
    数据库实体:Model.news 
    UI表现层: search.aspx(search.aspx.cs) 如sqlconnection or sqldataadapter sqlcommand 等对象只出现在数据库访问层,而不应出现在其他层
    假设数据库访问层有一个类DBServer,有方法成员Select、Find、Update、Delete等
    那么在逻辑层中,如SearchInfo类,可以如下
    public class SearchInfo
    {
        public SearchInfo(){}
        public Model.news GetDataByID(String PKID)
        {
           //............
           //use DBServer.Find(String.Format("{0}='{1}'",Model.news.ID,PKID);    
           //return DataTable 等再进行处理转换层Model obj                 
         }   
    }
    在UI表现层,如search.aspx.cs
    可以用
    SearchInfo biz=new SearchInfo();
    Model.news obj=biz.GetDataByID(this.TextBox1.Text);
    ...可参考Castle or NBear