日期:2014-05-20  浏览次数:20801 次

单薄的业务层
相信开发WEB信息的人都用到过三层架构  
表示层--》业务层--》数据访问层

以前一直开发CS结构最近一年一直在开发BS结构,接触到这些再作用过程中发现这个问题

比如:登录这个过程
业务层 
       BLogin.login(username,password) 有这么一个方法
数据访问层
       SQLLogin.login(username,password) 也有这么个方法

我现在的系统的业务层变成了表示层和数据访问层的一个链接了,几乎没有一点业务的数据,只是直接找到对应的方法调用
类似这种情况很多,不知道如何是好,求教中??

------解决方案--------------------
引用:
比如:登录这个过程
业务层 
  BLogin.login(username,password) 有这么一个方法
数据访问层
  SQLLogin.login(username,password) 也有这么个方法
……

楼主你这个DAL不是DAL,DAL是通用的,可以用在任何项目,而不需要修改任何代码
比如这样:
//实例化业务模型
Method _UserLogin = ModelDrv.GetMethod("UserLogin");
//创建视图,与用户交互,this指代当前界面,或者目标区域
this.Controls.Add(ViewDrv.CreateView(_UserLogin));
//从视图更新模型
ViewDrv.UpdateModel(this,_UserLogin);
//调用DAL层更新数据源
DAHelper.Execute(_UserLogin);

------解决方案--------------------
引用:
比如:登录这个过程

我要求登录时验证用户IP,只允许指定的地址登录...你怎么做?

我要求用户输入密码错几次就锁定帐户...你怎么做?

我要求用户可以不用麻烦的输入,下载安装个证书就可以自动登录...你怎么做?

我要求用户可以使用指纹、虹膜甚至未知的科幻产品登录...你怎么做?

说到底,不是你的业务层单薄...是你的业务“单薄”或者你们的业务就没有什么“设计”可谈...
------解决方案--------------------
要想使楼主的业务显示丰满一点其实很容易,
SQLLogin.login(username,password)
这个改成
//假如SQLLogin.login方法返回一个UserInfo类型的对象.
UserInfo user = SQLLogin.login(username);
if (user == null) throw new Exception("没有这个用户名");
if (user.Password != password) throw new Exception("用户密码错误")

哈哈,这样就多了一行,丰满了许多.
------解决方案--------------------
只能说你的业务设计的太简单,就Login来说,可以设计的很复杂:
1)login后,可以加载用户可访问的所有资源, 但你没有设置资源访问权限,那你就什么都没有
2)可能登录与计算机挂钩,即设置用户对特定计算机登录的限制,如果你没有这功能,那也啥都没有
3)可能设置同样用户登录数的限制,如不许同时在两地登录,如果你没有这功能,那也啥都没有

诸如此类的很多,因此并不是业务层简单,而是设计得简单,更确切的说是设计时考虑的因素太简单。