日期:2014-05-17  浏览次数:20828 次

初学者,三层架构的简单问题 请大家帮忙解答
我对三层架构的 BLL 层理解有些模糊,我想问一下:

BLL 主要是业务处理,他所谓的业务是指针对数据库查询出来的东西吗?

比如:要做一个登陆,登陆前,会判断用户输入是否有误,那么这个判断是属于业务吗?这个判断应该写在UI 还是 BLL层?

在一个比如当项目需要用到复杂的SOCKET,这个时候我们需要将SOCKET的方法其提取到一个类中,SOCKET类的方法主要是对一些命令的处理和进行相应的操作,请问,这个SOCKET类的方法属于业务吗?应该放在BLL 还是 UI 还是?


再比如,有时候我们可以 需要创建一些临时用的实体,这些临时用的实体有时候只是UI层用,并不需要连接数据库的,请问这些不连接数据库的实体也要放到实体层吗 ?

在一个,项目中用到了复杂的API函数,提取了一个类,这些复杂的API是对UI进行相应的判断和处理的,请问这个类是属于业务还是UI?

我的主要问题是 三层架构中,所谓的层,这些是不是只是针对数据库?如果不是针对数据库的东西放到common或者UI 吗?我上面举得例子都是不走数据库的。 BLL所谓的业务处理是指对数据库查出来的数据做相应的业务处理吗 ? 麻烦大家帮我解个这个误区 谢谢。
------解决方案--------------------
bll不是只跟数据库打交道,这不是必要的,它是处理 业务层面的需求的,socket是通信的,这个要看你具体需求了,放在哪并没有什么固定
------解决方案--------------------
业务层主要处理业务上的逻辑判断。
针对数据库的有DAL层,DAL才是主要跟数据库之间进行交互的。
------解决方案--------------------
不要太过找太过明确的划分。只把他理解成需要逻辑处理的层就行了
------解决方案--------------------
引用:
那临时的实体呢 是不是放到要用的那个层下面最好?

实体类不必放在某一层下,他可以单独放在三层之外……
------解决方案--------------------
放哪都行,据情况而定。

一般登录验证方法放BLL层,与数据库的操作放DAL层。
------解决方案--------------------
SOCKET类 就放在  xxxx.Net下就行了他跟业务没关系
------解决方案--------------------
DAL 数据访问层 一般写SQL语句操作数据库
BLL 业务层,不需要考虑SQL语句应该怎么写,一般作为DAL的扩展。


DAL 代码Demo
        /// <summary>
        /// 获得数据列表
        /// </summary>
        public DataSet GetList(string strWhere)
        {
            StringBuilder strSql = new StringBuilder();
            strSql.Append("SELECT *  FROM [TB_NOTE]");
            if (strWhere.Trim() != "")
            {
                strSql.Append(" where " + strWhere);
            }
            strSql.Append(" order by  [TB_NOTE_ROW_NUM]");
            return DbHelperSQL.Query(strSql.ToString());
        }

BLL 代码Demo

        /// <summary>
        /// 获得数据列表
        /// </summary>
        public DataSet GetID1(string strWhere)
        {
            return dal.GetList(" [_ID]='1'");
        }
       /// <summary>
        /// 获得数据列表