有几个关于三层结构的问题:(主要是对BLL层有些困惑) 1,在c/s的三层结构里,水晶报表的报表模板 放在那一层(BLL? DAL? UI?)?大家一般是怎么实现的? 2,日志记录放在那一层(BLL? DAL? UI?  BLL && DAL? )?感觉DAL和BLL都要似的,就是困惑,不明就里。 3,在用户填写某些信息,<确定>之前需要校验用户的输入(防止用户不小心输入错误的数据),
比如:
工资不能输入中文,手机号码不能是中文,某些项是必选的
在加载部门管理模块的时候,根据用户的权限加载,这里的控制在那一层实现 4,如果需要给所有实体类写一个基类,或者接口,目的是为了以后可以修改实体类,我该怎么写这个基类?
因为实体类都是属性,不知道怎么抽象出一个基类来,怎么办?或者这根本就不合理? 5,什么是领域模型?网上说的 面向业务..开发是怎么回事,就是困惑,不明就里。 谢谢!

解决方案 »

  1.   

    我们现在用的只是很基本NTier,DAL和BLL放一起,交流一下吧报表的模板我们都是放在UI的,发布上面的确是有些麻烦。这个个人觉得要看报表的量,如果量大且变动频繁应该放在BLL应该是各个层都有需要,本机UI如果要记录操作日志,自然UI也需要有日志处理相关的日志逻辑(当然最终要和DAL通讯);如果是数据库一级的Log,自然放在DAL;如果是BLL访问的Log,放在BLL比较合适吧?总之一切需要看具体的应用情况我们现在是UI和BLL(DAL里面的业务逻辑部分)里面都有,没办法,为了更好用户体验,不能每次校验都与Server联系(WinForm的情况下),BLL里面的检测主要是针对并发更新引起的逻辑错误,不知道有没有更好的办法?
      

  2.   

    1,在c/s的三层结构里,水晶报表的报表模板 放在那一层(BLL? DAL? UI?)?大家一般是怎么实现的? >>>>>>>>水晶报表的报表模板 应该是放在UI层的,是 表示层的东西,和 业务还有 数据层没有关系2,日志记录放在那一层(BLL? DAL? UI?  BLL && DAL? )?感觉DAL和BLL都要似的,就是困惑,不明就里。 >>>>>>>>日志记录 应该放在 BLL 主要是 应该叫 日志记录逻辑,  DAL主要是处理 数据交互的,它是不用知道 处理的数据内容3,在用户填写某些信息, <确定>之前需要校验用户的输入(防止用户不小心输入错误的数据), 
    比如: 
    工资不能输入中文,手机号码不能是中文,某些项是必选的 
    在加载部门管理模块的时候,根据用户的权限加载,这里的控制在那一层实现>>>>>>>>这些验证可以放在BLL 层 ,作为一个 独立的业务 ,提供接口 给UI调用 4,如果需要给所有实体类写一个基类,或者接口,目的是为了以后可以修改实体类,我该怎么写这个基类? 
    因为实体类都是属性,不知道怎么抽象出一个基类来,怎么办?或者这根本就不合理?>>>>>>>>>如果你不需要对这些 实体类进行操作,基类就没有必要,但是 总有一些 实体类 你对他的操作是 类似的或这相似的, 这些类需要 一个基类 统一处理 5,什么是领域模型?网上说的 面向业务..开发是怎么回事,就是困惑,不明就里。 >>>>>>>>>领域模型 应该是指 具体软件应用领域的 模型,比如 工作流 的处理模型、电力系统应用的数据处理模型、进销存 的处理逻辑,等等,这些应用 在UI和DAL 方面是差不多的,但是在 BLL 层就完全不一样,必须根据应用 来构建
      

  3.   

    1 模板放在UI层
    2 日志记录通过组件实现,一般BLL和DAL层都需要
    3 在WEB里通过页面JS判断,也可通过逻辑层实现判断
    4 把公共属性和接口抽象出来,看看设计模式
    参考
      

  4.   

    我补充:
     给所有实体类抽象出来一个 基类, 这个是对的。 
     可以创建一个IModel 的空接口,指定所有实体类都必须实现该接口。
      这样子的话,Dal 中所有的数据库访问类 都可以共 一个数据访问接口: IDal
     public interface IDal
    {
      void Insert(IModel model);
      void Update(IModel model);
      void Delete(string id);
      IModel GetById(string id);
    }实体类理论上不不属于任何层, 而是惯穿三层,做为传值媒介。
     
      
     
      

  5.   

    谢谢大家,刚在忙着,没想到一会的工会有这么多朋友回帖,
    我的困惑主要是:
    1:为什么我做的项目和petshop上的三层结构,基本上的BLL都像是透传 
    if(string.isnullorenpty(sParm)) 
    return null;return Idal.Amethod(sParm);
    感觉像透传(不知道这个词表达得清晰不),要不就像个switch开关,是不是因为我的项目是小项目的缘故?
    感觉没什么复杂的业务要处理,基本上透传(我算是不见棺材不落泪...)2,给实体类设计一个接口,这个怎么设计?我上次在项目中用了抽象类,
    里面没写任何东西,就一个空的,感觉很难交代?3,谢谢各位朋友!回帖都会有分的,我加分...呵呵
      

  6.   

    以前我们用的时候,报表模板是放在UI层,日志放在BLL,当然这跟用户要求有关,如果要记录详细的数据交互记录,在DAL也要放。校验我们当时的项目放在了UI层,当然根据实际情况也可以放在BLL层。领域模型单说定义没多大意义,我又不能形象的表达出来,楼主还是找找网上的一些学习笔记看看吧。
      

  7.   

    1,在c/s的三层结构里,水晶报表的报表模板 放在那一层(BLL? DAL? UI?)?大家一般是怎么实现的? >>>>>>>>水晶报表的报表模板 应该是放在UI层的,是 表示层的东西,和 业务还有 数据层没有关系 2,日志记录放在那一层(BLL? DAL? UI?  BLL && DAL? )?感觉DAL和BLL都要似的,就是困惑,不明就里。 >>>>>>>>日志记录 应该放在 BLL 主要是 应该叫 日志记录逻辑,  DAL主要是处理 数据交互的,它是不用知道 处理的数据内容 3,在用户填写某些信息, <确定>之前需要校验用户的输入(防止用户不小心输入错误的数据), 
    比如: 
    工资不能输入中文,手机号码不能是中文,某些项是必选的 
    在加载部门管理模块的时候,根据用户的权限加载,这里的控制在那一层实现 >>>>>>>>这些验证可以放在BLL 层 ,作为一个 独立的业务 ,提供接口 给UI调用 4,如果需要给所有实体类写一个基类,或者接口,目的是为了以后可以修改实体类,我该怎么写这个基类? 
    因为实体类都是属性,不知道怎么抽象出一个基类来,怎么办?或者这根本就不合理? >>>>>>>>>如果你不需要对这些 实体类进行操作,基类就没有必要,但是 总有一些 实体类 你对他的操作是 类似的或这相似的, 这些类需要 一个基类 统一处理 5,什么是领域模型?网上说的 面向业务..开发是怎么回事,就是困惑,不明就里。 >>>>>>>>>领域模型 应该是指 具体软件应用领域的 模型,比如 工作流 的处理模型、电力系统应用的数据处理模型、进销存 的处理逻辑,等等,这些应用 在UI和DAL 方面是差不多的,但是在 BLL 层就完全不一样,必须根据应用 来构建