本文针对《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. UIColor

    UIColor.CIColor 和 CGColor 出现在不同的类库里面,其实就是颜色存储方式不同而已,比如 999 可以用 10 进制.2 进制.16 进制等存储.三者之间都是能够方便转换的,特别是 ...

  2. Python中dataframe\ array\ list相互转化

    import pandas as pd import numpy as np #创建列表 a1=[1,2,3] #arange函数:指定初始值.终值.步长来创建数组 a2=np.arange(0,1, ...

  3. 167. Two Sum II - Input array is sorted两数之和

    1. 原始题目 给定一个已按照升序排列 的有序数组,找到两个数使得它们相加之和等于目标数. 函数应该返回这两个下标值 index1 和 index2,其中 index1 必须小于 index2. 说明 ...

  4. jzoj4918. 【GDOI2017模拟12.9】最近公共祖先 (树链剖分+线段树)

    题面 题解 首先,点变黑的过程是不可逆的,黑化了就再也洗不白了 其次,对于\(v\)的祖先\(rt\),\(rt\)能用来更新答案当且仅当\(sz_{rt}>sz_{x}\),其中\(sz\)表 ...

  5. java读取 500M 以上文件,java读取大文件

    java 读取txt,java读取大文件 设置缓存大小BUFFER_SIZE ,Config.tempdatafile是文件地址 来源博客http://yijianfengvip.blog.163.c ...

  6. Ubuntu系统升级遇到问题记录

    The upgrade needs a total of 99.7 M free space on disk '/boot'. Please free at least an additional 5 ...

  7. python 面向对象及封装继承和多态

    ######装饰器######装饰器的概念 - 装饰器的实现是函数里面嵌套函数;- 装饰器的本质是一个函数, 它可以让其他函数在不需要做任何代码改动的前提下增加额外的功能;- 装饰器需要传递一个函数, ...

  8. 练习五十七:for循环 809??=800*?+9*?+1其中?代表的两位数,8*?的结果为两位数,9*?的结果为3位数。求?代表的两位数,及809??后的结果

    题目:809??=800*?+9*?+1其中?代表的两位数,8*?的结果为两位数,9*?的结果为3位数.求?代表的两位数,及809??后的结果 注意:一定要看清楚题目哦,809??代表的是结果,?代表 ...

  9. hdu 6288(二分法加精度处理问题)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6288 题意:给出a,b,k,n可满足(n^a)*(⌈log2n⌉)^b<=k ,求最大的n值三个 ...

  10. wget访问tomcat管理界面

    tomcat已经部署了管理界面,通过如下命令,将tomcat的状态信息打印到status.xml文件中,对于不方便使用浏览器访问该页面的情况,还是很有用的. wget http://localhost ...