zoukankan      html  css  js  c++  java
  • [原创]关于多层设计想到的问题涉及Nhibernate和Log4Net

    请先看一下我的分层结构


    DataAccess:数据访问层
    BusinessEntity:业务实体层
    BusinessRule:业务逻辑层
    WebUI:表示层
    WebUIController:表示层组件控制
    SystemFramework:本系统框架

    所遇到的问题以及解决方法我会相应地写出来
    1。不能把CRUD作为单独的事务处理封装在DataAccess层,因为只有BusinessRule层才有权力决定那些操作构成一个事务。但是NHibernate又建议每次操作必须要使用事务,这很矛盾。我想到的解决办法是在dataAccess层预留两个接口供BusinessRule去调用——BeginTransaction和CommitTransaction,而Rollback的操作是在DataAccess层自动处理的,BusinessRule层不用理会。这样BusinessRule层就对事务有完全的控制权了。

    2。错误处理的问题。不管是弹出Error窗口还是跳转到一个Error页面,我觉得都是WebUI设计的大忌,这会给浏览用户带来很大的困扰。我的处理方法是:在BusinessRule里面每个类里面会有一个Public的ErrorMessage供表示层读取,如果BusinessRule遇到错误,一方面要把Exception.ErrorMessage这样专业的技术错误术语通过Log4Net记录在数据库中,以后技术人员可以查看。而给浏览用户要返回一个友好的提示信息,这些信息就记录在BusinessRule的ErrorMessage中,供表示层读取,然后以Response.Write的方式在表示层显示出来。就算一部分错了,其他部分也不会阻碍用户去浏览。

    3。关于DataAccess和BusinessRule的职责,理论上说,BusinessRule应该和NHibernate完全不打交道的,这应该全都是DataAccess的事情。但是有时候你会发现这很难办到,我困惑。BusinessRule层真的完全用不到NHibernate马?最突出的问题是组合条件查询,组合条件更新删除。不知道大家在这方面有没有好的方法?

     大家可以通过我的图提出更多的问题,希望大家踊跃讨论!

  • 相关阅读:
    JS-instanceof 与typeof
    JS-面向对象相关
    spark job源代码物理执行图实战
    堆(heap)和栈(stack)的区别
    sql developer怎样调试Pipelined
    oracle dbms_output 在java中输出
    sed 用法笔记
    oracle 怎样建自增长字段
    python学习笔记--split与join用法
    如何开启php报错
  • 原文地址:https://www.cnblogs.com/leonbao/p/269994.html
Copyright © 2011-2022 走看看