惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

阮一峰的网络日志
阮一峰的网络日志
D
Darknet – Hacking Tools, Hacker News & Cyber Security
S
Schneier on Security
The Last Watchdog
The Last Watchdog
Cyberwarzone
Cyberwarzone
S
Securelist
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
C
Cyber Attacks, Cyber Crime and Cyber Security
L
Lohrmann on Cybersecurity
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 司徒正美
The Cloudflare Blog
V
V2EX
博客园_首页
博客园 - 聂微东
Vercel News
Vercel News
人人都是产品经理
人人都是产品经理
G
GRAHAM CLULEY
T
Tenable Blog
Last Week in AI
Last Week in AI
Y
Y Combinator Blog
L
LINUX DO - 最新话题
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
SecWiki News
SecWiki News
博客园 - 三生石上(FineUI控件)
S
Secure Thoughts
N
News | PayPal Newsroom
T
The Blog of Author Tim Ferriss
The GitHub Blog
The GitHub Blog
T
Troy Hunt's Blog
博客园 - 【当耐特】
Forbes - Security
Forbes - Security
H
Hacker News: Front Page
A
About on SuperTechFans
B
Blog RSS Feed
Engineering at Meta
Engineering at Meta
MongoDB | Blog
MongoDB | Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
罗磊的独立博客
D
DataBreaches.Net
P
Privacy & Cybersecurity Law Blog
Schneier on Security
Schneier on Security
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Google DeepMind News
Google DeepMind News
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Jina AI
Jina AI
D
Docker
P
Proofpoint News Feed

博客园 - leonbao

Unity3D - 关于Dynamic和Static HTML5 - HTML5 postMessage API 注意事项 Cocos2d-x——支持多触点 Cocos2d-x——Cocos2d-x 屏幕适配总结 Cocos2d-x——Cocos2d-x 屏幕适配新解 – 兼容与扩展【转载】 Cocos2d-x——Cocos2d-x 屏幕适配新解【转载】 Unity3D-Baked Lightmapping 示例学习 Cocos2d-x——CocosBuilder官方帮助文档翻译3 动画 Cocos2d-x——CocosBuilder官方帮助文档翻译2 多分辨率支持 Cocos2d-x——pthread的使用注意事项 人工智能-有限状态机(FSM)的学习 Cocos2d-x——CocosBuilder官方帮助文档翻译1 使用自定义类 高性能服务器-关于游戏服务器中多线程的使用 Unity3D-UnityVS的安装和使用 高性能服务器-多线程的再次学习 Programming Windows Workflow Foundation第六章-工作流宿主翻译完成 关于SQL Server数据库设计的感悟,请指教 关于分层结构的感悟,请指教 NHibernate 连接 Access数据库的配置文件 - leonbao
[原创]关于多层设计想到的问题-涉及Nhibernate和Log4Net
leonbao · 2005-11-06 · via 博客园 - leonbao

请先看一下我的分层结构

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马?最突出的问题是组合条件查询,组合条件更新删除。不知道大家在这方面有没有好的方法?

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