您的位置: 首页 > 技术文档 > 网络编程 > 阐述.NET应用架构
用智能跟踪(IntelliTrace)窥入云端 回到列表 20年来我得到的20条编程经验
 阐述.NET应用架构

作者:bluehearts 时间: 2010-06-08 文档类型:原创 来自:蓝色理想

业务组件的设计是非常重要的工作,如果你没有正确的设计业务组件的话,结果很可能就是代码难以维护和扩展。在设计和实现应用的时候,有多种类型的业务组件。包括业务逻辑组件,业务实体,业务流程或者是工作流组件,工具和帮助组件。

设计步骤

1 确定在应用中将会使用的业务组件

在业务层,你需要创建和使用各种类型的组件来处理业务逻辑。本步骤的目标就是如何识别这些组件,发现应用需要的组件。下面的步骤帮助你确定你需要那些组件:

  • 考虑使用业务逻辑组件来封装业务逻辑和应用状态。业务逻辑是一种集中于实现业务规则和行为的应用逻辑,同时包括维护全局的一致性,例如数据合法性验证。业务逻辑组件应该设计成容易测试的、独立于表现层和数据访问层。
  • 考虑使用业务实体作为领域模型的一部分,来代表真实世界的业务实体,例如产品和订单。
  • 如果你的应用需要支持以一种特殊的顺序进行多进程处理,考虑使用业务工作流组件。使用在多个业务逻辑组件之间进行交互所需的业务规则。通过升级工作流组件就可以改变应用的行为。如果应用一定要实现根据业务规则实现动态的业务逻辑的话,考虑使用工作流组件。考虑使用WF实现工作流组件,考虑和微软的BizTalk Server环境整合。

2 为业务组件做关键的决定

web应用中的业务组件通常处理消息为基础请求,windows form应用通常处理事件为基础的请求。另外,不同类型的应用关注点也不同。一些因素是不分应用类型的,一些因素又是每个应用类型特有的。你一定要处理的关键问题包括:

  • 部署位置。你的业务逻辑组件是放在客户端吗?还是应用服务器?还是两者都有?如果应用是富客户端应用或者是RIA,想要提高性能,使用领域模型设计业务实体,考虑在客户端放一些业务组件。如果要支持多种客户端类型,如果业务组件需要访问客户端访问不到的资源,或者是安全原因,考虑将业务组件放在应用服务器上。
  • 耦合。表现层组件如何与业务组件交互?是应该设计一个表现层直接知道业务组件的紧耦合,还是一个对表现层屏蔽实现细节的业务组件松耦合。如果你是一个富客户端类型或者是RIA,可以考虑紧耦合表现层和业务组件。但是松散耦合可以提高可测试性和灵活性。如果你有一个富客户端类型或者是RIA应用,将业务组件部署在应用服务器或者是web服务器,为它们之间的交互设计一个服务接口,来实现松散耦合。
  • 交互。如果业务组件和表现层组件部署在同一个物理层,考虑使用通过事件和方法的组件为基础的交互,来最大化性能。但是,如果表现层和业务层部署在不同的物理层,考虑使用服务接口和消息为基础的交互方式。

3 选择适当的事务支持

业务组件负责协调和管理业务层需要的事务。但是第一步是决定是否需要事务支持。事务用来确保一些的行为都可以执行,例如数据库事务。事务以一个单独的单元来完成。如果单元中的一个行为失败,其他的行为会回滚,确保系统的一致性状态。例如:有一个操作需要更新三张表,如果一个失败,两个成功,数据库将会处于不一致状态,这时候适合用事务来执行,一个失败,大家都回滚到事务之前的状态,保证了一致性。事务包括下面的一些类型:

  • System.Transactions。使用业务逻辑初始化和管理事务。包括在.NET 2.0中,实现轻量的事务管理。
  • WCF Transactions。在.NET 3.0中引入,如果和WCF service进行交互,考虑使用WCF Transactions。
  • ADO.NET Transactions。
  • Database。

4 确定业务规则如何处理

业务规则的管理是应用最有挑战性的设计之一。通常业务规则用于业务层。但是,他们会在业务层的那里呢?你可以放在业务逻辑或者是工作流组件,或者是一个独立的业务规则引擎,又或者是包含在领域模型设计的业务实体中。参考下面的选项:

  • 业务逻辑组件。
  • 工作流组件。
  • 业务规则引擎。
  • 领域模型设计。将业务规则包括在业务实体中。

5 确定满足需求的设计模式

设计模式 推荐原因

Adapter适配器模式

  允许没有兼容接口的类在一起工作,允许开发者实现一个多态的类为现有了类提供一个可替代的实现。
Command   推荐在富客户端应用的菜单、工具条、键盘快捷键中使用,不同的组件执行相同的命令。
Chain of Responsibility   可以用来代替if 。。。then。。。else语句,可以处理复杂的业务规则。
Decorator   通过添加和修改操作,在运行的时候扩展对象的行为。需要一个通用的接口,有一个Decorator类来实现它。可以处理复杂的业务规则。
Dependency Injection   使用一个独立的类创建对象和成员,通常基于配置文件在运行的时候创建依赖关系。配置文件中指明类型的映射关系。提供一个修改行为的灵活方式,从而实现复杂的业务规则。
Facade 提供粗粒度的操作,统一多个业务组件的结果。典型的应用是,在业务层为以消息为基础的接口实现一个远程的外观,用来在表现层和业务层提供一个松散的耦合。
Factory 不用指定的类型创建对象实例,需要对象实现通用的接口,或者是继承一个基类。

Transaction

Script

在很少的业务规则的CRUD操作中推荐使用。

本文链接:http://www.blueidea.com/tech/program/2010/7652.asp 

出处:蓝色理想
责任编辑:bluehearts

◎进入论坛网络编程版块参加讨论

作者文章 更多作者文章
中国数字媒体产学研联盟成立
第二届"昆山杯"笔记本电脑设计大赛
首届UED周末论坛图文报道
UI AWARD 2010(国家级UI设计评选)
用vs2010构建Silverlight4应用程序
热门搜索:CSS Fireworks 设计比赛 网页制作 web标准 用户体验 UE photoshop Dreamweaver Studio8 Flash 手绘 CG
站点最新 站点最新列表
周大福“敬•自然”设计大赛开启
国际体验设计大会7月将在京举行
中国国防科技信息中心标志征集
云计算如何让安全问题可控
云计算是多数企业唯一拥抱互联网的机会
阿里行云
云手机年终巨献,送礼标配299起
阿里巴巴CTO王坚的"云和互联网观"
1499元买真八核 云OS双蛋大促
首届COCO桌面手机主题设计大赛
栏目最新 栏目最新列表
浅谈JavaScript编程语言的编码规范
如何在illustrator中绘制台历
Ps简单绘制一个可爱的铅笔图标
数据同步算法研究
用ps作简单的作品展示页面
CSS定位机制之一:普通流
25个最佳最闪亮的Eclipse开发项目
Illustrator中制作针线缝制文字效果
Photoshop制作印刷凹凸字体
VS2010中创建自定义SQL Rule
分享按钮

蓝色理想版权申明:除部分特别声明不要转载,或者授权我站独家播发的文章外,大家可以自由转载我站点的原创文章,但原作者和来自我站的链接必须保留(非我站原创的,按照原来自一节,自行链接)。文章版权归我站和作者共有。

转载要求:转载之图片、文件,链接请不要盗链到本站,且不准打上各自站点的水印,亦不能抹去我站点水印。

特别注意:本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有,文章若有侵犯作者版权,请与我们联系,我们将立即删除修改。

您的评论
用户名:  口令:
说明:输入正确的用户名和密码才能参与评论。如果您不是本站会员,你可以注册 为本站会员。
注意:文章中的链接、内容等需要修改的错误,请用报告错误,以利文档及时修改。
不评分 1 2 3 4 5
注意:请不要在评论中含与内容无关的广告链接,违者封ID
请您注意:
·不良评论请用报告管理员,以利管理员及时删除。
·尊重网上道德,遵守中华人民共和国的各项有关法律法规
·承担一切因您的行为而直接或间接导致的民事或刑事法律责任
·本站评论管理人员有权保留或删除其管辖评论中的任意内容
·您在本站发表的作品,本站有权在网站内转载或引用
·参与本评论即表明您已经阅读并接受上述条款
推荐文档 | 打印文档 | 评论文档 | 报告错误  
专业书推荐 更多内容
网站可用性测试及优化指南
《写给大家看的色彩书1》
《跟我去香港》
众妙之门—网站UI 设计之道
《Flex 4.0 RIA开发宝典》
《赢在设计》
犀利开发—jQuery内核详解与实践
作品集 更多内容

杂⑦杂⑧ Gold NORMANA V2