本文针对《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. 使用Unity的2D功能开发弹球游戏

    https://mp.weixin.qq.com/s/7xjysNDVHe7avF1v2NZWcg

  2. 装饰器设计模式初探及Java中实际应用举例

    本篇随笔主要介绍用Java实现简单的装饰器设计模式: 先来看一下装饰器设计模式的类图:  从图中可以看到,我们可以装饰Component接口的任何实现类,而这些实现类也包括了装饰器本身,装饰器本身也可 ...

  3. Java泛型<>内各种参数的异同

    先说下本篇随笔主要涉及到的东西(参考Java编程思想一书): 1.说明 List<Fruit> 与 List<Apple> 之间为什么是非继承关系. 2.由 1 引出的问题说明 ...

  4. Linux串口参数设置

    linux串口编程参数配置详解 1.linux串口编程需要的头文件 #include <stdio.h>         //标准输入输出定义#include <stdlib.h&g ...

  5. [Node.jS]shelljs

    shelljs : https://www.npmjs.org/package/shelljs 要给可以替代Unix下shell脚本的库. require('shelljs/global'); if ...

  6. Mybatis学习笔记(九) —— Mybatis逆向工程

    一.什么是Mybatis逆向工程? 简单的解释就是通过数据库中的单表,自动生成java代码. 我们平时在使用Mabatis框架进行Web应用开发的过程中,需要根据数据库表编写对应的Pojo类和Mapp ...

  7. sublime 配置主题

    默认主题可能看不清楚: 安装 PackageResourceViewer 安装Soda 主题 setting中加入 "theme": "Soda Light 3.subl ...

  8. eclipse 自定义 文档

    在这里写....

  9. 查看php 相关信息

    PHP系统常量 __FILE__ 当前PHP程序脚本的绝对路径及文件名称 __LINE__ 存储该常量所在的行号 __FUNCTION__ 存储该常量所在的函数名称 __CLASS__ 存储该常量所在 ...

  10. windows下安装TensorFlow(CPU版)

    建议先到anaconda官网下载最新windows版的anaconda3.6,然后按步骤进行安装.(这里我就不贴图了,自己下吧) 1.准备安装包 http://www.lfd.uci.edu/~goh ...