本文针对《MS .NET企业级应用架构设计》业务层前半部分做了相关笔记并记录了自己的一点想法。对于后半部分的具体模式将在第二次笔记中体现。
 

关于Layer与Tier

Layer一般用来组织代码。例如当提到表现层(Presebtation Layer),我们指的是应用程序前端的功能,而并不是某种客户端平台或技术。
Tier指代码运行的位置。Tier常指物理上的层次或一个物理层。或者可以这样说,Tier就是架构师让逻辑层运行的地方。
以前一直以为业务层只能应用在具体的某一物理层上,事实上,物理层的Tier与组织代码的Layer是有区分的,跨物理层的Layer只要适当在Layer混合层(Tier独立层)的代码中加以分离,仍然是可以达到良好的代码维护效果的。但个人感觉这并非推荐的模式。
 
关于是否推荐多物理层架构
物理层中一个层就表示一个需要穿过的边界,这个边界可能是进程的便捷也可能是计算机的边界。穿越边界的代价较高,一个估算比例是穿越便捷要比进程内部调用慢100倍左右。若需要通过网络访问,还要更慢一些。多物理层会导致整体性能的降低。
而有时又不得不需要多物理层。一个理由是需要支持外部产品,而外部产品需要自己的进程来运行;另一个理由是出于安全方面的考虑,运行于一个独立进程中的模块将会更容易被保护和访问。再者,多物理层架构具有可伸缩的特性,系统的组件可拆分至其他层并重复部署。
总之物理层的分层需要在系统性能与安全性、可伸缩性、容错性之间平衡。
在项目中遇到此类问题时,可将系统性能等综合考虑。在经历项目的同时发现,在同流程下,既有跨物理层通讯也有同物理层通讯的代码处理相当麻烦,两种形态的代码带来的可维护性极差,是否能够运用设计模式解决这一问题?
 
关于过程模式与对象模式
在业务层中,对其实现模式进行分解,可以分为过程模式与对象模式。
业务逻辑层被看作一系列相关的操作,系统需要执行的步骤被分割为更小的步骤,每一个步骤都用一个操作表示,这样的操作叫事务。在这个上下文中,事务是一个不可分割的逻辑操作,这个模式叫做事务脚本(Transaction Script) 。
另一种过程模式称之为表模块(Table Module)。表模块的设计角度仍是一系列事务,不过事务是按照数据分组的。操作被定义在表示表数据的对象上。我们使用表数据作为实体,组织方法。
对于对象模式,我们用一系列相互交互的对象来组织逻辑。最简单的对象模型看上去像是数据库表的数据模型,这里组成模型的对象就是数据库中的记录,并增加了一些额外的方法。这个模式叫做活动记录(Active Record)。抽象程度越高,与数据模型的距离也越大,这种高度抽象的模式叫做领域模型(Domain Model)。
从上图中可得出结论,对于复杂度较低的逻辑,采用过程模式能够产生较好的实现,但随着逻辑复杂度的提升,程序的代价将变得很高。原因在于过程模式的编码虽然简单高效,但需要不断的重构以减小“意大利面代码”带来的危害,而对于大多数程序员来说,一旦代码逻辑结果实现,一定会对其置之不理,因此由领域驱动的面向对象的业务层代码便体现出相当大的优势。对于复杂逻辑的代码可维护性与拓展性均比过程模式强健。
在具体的项目中,普通的过程性逻辑是适用过程模式的,也是我最熟悉的,尤其是事务脚本;但对象模式却经历的较少,今后可在组炉等复杂逻辑中考虑是否可以改成对象模式,加上设计模式的合理应用,应该会对程序的可维护性与可扩展性有较大幅度的提升。

MS .NET企业级应用架构设计笔记1(关于业务层)的更多相关文章

  1. 读书笔记: Microsot .NET企业级应用架构设计

    Microsot .NET企业级应用架构设计 Dino Esposito   Andrea Saltarello 编    陈黎夫 译   人民邮电出版社 第一部分 设计原则 第1章 当代架构师和架构 ...

  2. 优酷、YouTube、Twitter及JustinTV视频网站架构设计笔记

    本文是整理的关于优酷.YouTube.Twitter及JustinTV几个视频网站的架构或笔记,对于不管是视频网站.门户网站或者其它的网站,在架构上都有一定的参考意义,毕竟成功者的背后总有值得学习的地 ...

  3. [转]专访企业QQ SaaS团队,谈企业级LNMP架构设计

    FROM : http://www.csdn.net/article/2014-08-20/2821302-interview-tencent-b-qq-shuai-wang 对比IaaS和PaaS, ...

  4. mysql性能调优与架构设计笔记

    1.mysql基本介绍 mysql支持多线程高并发的关系型数据库; 数据库存储引擎InnoDB.MyISAM; mysql快速崛起的原因就是他是开源的; 性能一直是mysql自豪的一大特点; 2.my ...

  5. 电商架构设计-通过系统和业务拆分,遵循单一职责原则SRP,保障整个系统的可用性和稳定性

    个人观察 1.通过系统和业务拆分,遵循单一职责原则SRP,保障整个系统的可用性和稳定性. 2.单一职责原则SRP,真的很关键,广大程序员需要不断深入理解这个原则. 3.架构图是架构师的重要输出,通过图 ...

  6. 读书笔记 (.NET企业级应用架构设计)

    建议你自己和别人多沟通(学会沟通会使你在公司更好的发展,有意见就提,有问题就问,有困难就说)加油lxp 1.架构师是用来干嘛的: 架构师分析需求,分析系统要去做什么,架构怎么去做 2.架构师的职责是: ...

  7. DDD中 与Dto搭配的AutoMapper插件,摘自《NET企业级应用架构设计》

    AutoMapper插件 实现了 DTO与Model的互相映射.

  8. DDD中Dto领域驱动设计概述,摘自《NET企业级应用架构设计》

  9. 京东应用架构设计ppt阅读总结

    (一)架构设计原则总结: 1.架构愿景:高可用性.高可扩展性.低成本.多快好省(高时效.高人效.低成本) 2.业务架构设计原则:基础业务下沉抽象成平台.核心业务非核心业务分离.隔离不同类型的业务.主流 ...

随机推荐

  1. AppDelegate生命周期回调顺序

    1. 应用初次启动: - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDiction ...

  2. pychram编写代码鼠标变粗处理

    现象:如下图 解决: 键盘 点击 insert 按钮即可解决

  3. Knights0.

    Knights t数轴上有n个骑士位于1,2,3,...n,移动速度相同,初始移动方向已知,当两个骑士相遇时,各有50%的概率赢,输了就死了,并且移动到0和n+1的位置时移动方向会翻转,问最右的骑士存 ...

  4. Python字典基础知识补充

    1.添加键值对 #!/usr/bin/env python i1 = {'k1':'cai' , 'k2':123} print(i1) i1['k3'] = 0 i1['k4'] = "r ...

  5. 查看ip常见命令...

    1.获取ip Unix用户可以在命令提示符中输入ifconfig来获取. 使用Windows的用户,请尝试使用 ipconfig 命令.

  6. windows下eclipse远程连接hadoop集群开发mapreduce

    转载请注明出处,谢谢 2017-10-22 17:14:09  之前都是用python开发maprduce程序的,今天试了在windows下通过eclipse java开发,在开发前先搭建开发环境.在 ...

  7. TestNG+ExtentReports生成超漂亮的测试报告(转)

    一个优雅.漂亮的测试报告,能够给我们的测试工作带来不少的加分,而报告的模版实在是让我们这些技术人员头疼的问题,设计的实在是没有什么美感. 那么今天就给大家分享一个自动化测试中,一个超漂亮的测试报告模版 ...

  8. P2906 [USACO08OPEN]牛的街区Cow Neighborhoods

    传送门 曼哈顿距离好像不好直接算,我们可以把牛的坐标转化一下以方便计算距离 (x,y) --> (x+y,x-y) 那么距离就可以表示成 $max(\left |x_1-x_2  \right ...

  9. PyCharm出现module 'matplotlib' has no attribute 'verbose'解决方案

    其实不是你安装错了,也不是你代码问题,这就是PyCharm的锅! 虽然有三种解法办法,我觉得还是改IDE配置是最佳方法 把这个钩去掉就行了...... # -*- coding: utf-8 -*- ...

  10. hdu2553 N皇后问题(dfs+回溯)

    N皇后问题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...