本文针对《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. Ubuntu 如何为 XMind 添加快速启动方式和图标

    目录 Ubuntu 如何为 XMind 添加快速启动方式和图标 Ubuntu 如何为 XMind 添加快速启动方式和图标 按照教程Ubuntu16.04LTS安装XMind8并创建运行图标进行Xmin ...

  2. 求解热传导方程matlab

    这是非稳态一维热传导的方法,也叫古典显格式. 如果是做数学建模,就别用了,这种方法计算量比较大,算的很慢,而且收敛不好. 但是如果实在没办法也能凑合用. 该改的地方我都用???代替了. 给个详细解释h ...

  3. mysql 表压缩

    mysql中经常出现历史表,这些表不会进行修改数据的操作,只有读操作.那么我们可以对其进行压缩处理,缩减磁盘空间.Innodb表和MyISAM表的压缩指令不一样.下面分别来讨论: 一.InnoDB表 ...

  4. JQuery全局篇

    学到JavaScript的时候,感觉这个东西很神奇,没想到学到JQuery的时候,发现BS的世界,真的很微妙,不经意的一个方法就可以给人焕然一新的感觉,很喜欢这个阶段学的东西,但是还是感觉少于代码的训 ...

  5. Java基础之开发工具Eclipse的使用

    Eclipse简介 Eclipse是由IBM公司投资4000万美元开发的集成开发工具.它是目前最流行的Java集成开发工具之一,基于Java语言编写,并且是开放源代码的.可扩展的(Integrated ...

  6. B君的第九题

    B君的第九题 对于一个排列\(a_1, a_2,\dots,a_n\),如果对于一个i满足\(a_{i-1}<a_i>a_i+1\)则称i是一个极大值.我们认为\(a_0=a_{n+1}= ...

  7. DB2存储过程标准

    CREATE OR REPLACE PROCEDURE "FCT"."PROC_FCT_DSB_SERIES"(IN ACCOUNTING_DATE DATE) ...

  8. Unity---Directory目录的删除、存在、创建操作

    使用Directory类要引入命名空间 using  System.IO; Directory类下的三个静态方法. public static void CreateDirectory(string  ...

  9. 记一次IIS应用程序域崩溃的原因

    在日常工作中,每次新的功能上线前,我们会搭建一个测试环境提供给客户测试使用,确定无误后才会更新到正式环境上.这一次也不例外,在约定好时间地点,客户进行集中化测试的过程中,反应网站系统打不开,报500错 ...

  10. SP18637 LAWRENCE - Lawrence of Arabia

    \(\color{#0066ff}{ 题目描述 }\) 给定一个长度为n的序列,至多将序列分成m+1段,每段序列都有权值,权值为序列内两个数两两相乘之和.求序列权值和最小为多少? \(\color{# ...