红色有角F叔对《企业应用架构模式》的笔记(9)

红色有角F叔
红色有角F叔 (次元の呪い)

读过 企业应用架构模式

企业应用架构模式
  • 书名: 企业应用架构模式
  • 作者: Martin Fowler
  • 页数: 363
  • 出版社: 机械工业出版社
  • 出版年: 2010-4
  • 引言
    他认为,架构是一种主观上的东西,是专家级项目开发人员对系统设计的一些可共享的理解。
    即使是某个企业统一了集成技术,它们也还是会遇到业务过程中的差异以及数据概念的不一致性。
    我认为“业务逻辑”这个词很滑稽,因为很难再找出什么东西比“业务逻辑”更加没有逻辑。
    在文件拷贝过程中,为用户提供一个“进度条”,将会提高用户界面的响应性,但并不会提高响应时间。
    2014-07-21 21:49:52 回应
  • 分层
    层次并不能封装所有东西,有时它会为我们带来级联修改。
    20世纪90年代,随着 C/S 系统的出现,分层的概念更明显了... 问题来自领域逻辑:如业务规则、验证、计算等。通常,人们会把它们写在客户端,但是这样很笨拙,并且往往把领域逻辑直接嵌入到用户界面。... 另一种办法是把这些领域逻辑放到数据库端,作为存储过程。
    MVC 式的分层是面向对象的产物。在 C/S 时代,Client 直接操作控件里的数据源,数据源映射到后端的数据库。现在的同学应该很难分辨哪些关系式数据库的 feature 是 C/S 时代的遗留了。
    当人们讨论分层时,常常不容易区分 layer 和 tier。... tier 意味着物理上的分离。客户/服务器系统通常被称为 "Two Tier System。"
    以下因素被 Jens Coldewey 称为复杂性增压器(Complexity Booster):分布、显式多线程、范型差异(例如对象/关系)、多平台开发以及极限性能要求。
    2014-07-21 21:58:50 回应
  • 第二章
    ActiveRecord 就是从行数据入口开始,把领域逻辑加到类中。
    rails 的 ActiveRecord 和 DataMapper 两个 ORM 在模式层面其实区别不大,后者并没有反映 DataMapper 模式的样子,把业务逻辑加到 DataMapper 的子类的话,还是 ActiveRecord 模式。
    django 自带的 ORM 更像 DataMapper 模式一些?
    关系数据库的映射开销大概是程序开发总开销的 1/3。
    现代的系统允许把引用完整性检查延迟到交互结束的时候进行。如果有这个能力,没有道理不使用它。
    2014-07-24 23:32:46 回应
  • 分布策略
    细粒度接口不能很好地用在远程调用中。.... 当在多个类上应用分布式策略时,最终得到的系统有许多的远程调用,从而需要繁琐的粗粒度接口。
    因为远程调用的成本,人们倾向于希望在一次调用中完成更多的事情,导致远程调用的接口变得臃肿不堪。
    分布式对象设计第一定律:不要分布使用对象。
    在设计系统时必须尽可能限制分布边界。... 最困难的地方在于:要保证结果不会产生太多的远程调用。
    我认为在 Web Service 中更适合使用异步方式。
    2014-07-24 23:36:03 回应
  • 通盘考虑
    .NET 大力宣传的是 Web Services,但是我不会在一个应用程序内部使用 Web Services,而只会像在 Java 中一样,使用它们作为一种允许应用集成的表现层。
    在我撰写本书时,专家们关于 Web Services 比较一致的观点是:它使得重用成为现实,并最终导致系统集成商的消失。但是我对此持谨慎态度。Web Services 在本书介绍的这些模式中发挥不了太大的作用,因为 Web Services 是应用集成而不是应用构建的技术。
    2014-07-24 23:39:27 回应
  • 远程外观 (Remote Facade)
    任何对象可能作为远程对象使用时,经常需要一个粗粒度的接口来减少完成某些任务所需要的调用次数。这不仅会影响你的方法调用,同样还会影响你的对象。现在,一个调用中就会包括访问和更改订单及订单的功能,而不会像以前那样分开调用,这会完全影响你的对象结构。你将不得不放弃小粒度对象和小粒度方法带来的清晰意图和小粒度控制所带来的好处。编程变得困难,并且会使生产率下降。
    分布式对象意味着粗粒度的调用。Ajax 是一个例子,跟前端工程师协作时,总是尽可能地把尽可能多的数据塞到一个响应里。
    一个远程外观是一个粗粒度的外观(facade),它建立在大量的细粒度对象之上。所有细粒度对象都没有远程接口,并且远程外观不包括领域逻辑。远程外观所要完成的功能是把粗粒度的方法转换到低层的细粒度对象上。
    任何外观都应该是一层薄薄的皮肤并且只负责很小一部分责任。
    对 RESTful 服务而言,Facade 对应着 Controller 这一层。
    远程外观这种模式意味着同步。
    2014-08-05 22:37:54 1人推荐 回应
  • 数据传输对象(Data Transfer Object)
    很多方面,数据传输对象都是我们被告知永远不要写的对象之一。它经常只不过是一堆字段及它们的 getter 和 setter 方法。这种对象的价值在于允许你在一次调用中传输几部分的信息,这是分布式系统的本质。
    Form Object 也可以算是一种 DTO 吧。
    数据传输对象的常见格式是记录集。... 记录集就是一个为 SQL 数据库服务的数据传输对象。
    序列化的一个重要用因素是连接双方的数据传输对象的同步。从理论上说,无论何时服务器改变了数据传输对象的定义,客户也都应该可以同时更新它的数据。
    数据传输对象会承担序列化/反序列化的职责。
    thrift 那类远程调用工具做的事情,也正是数据传输对象了。
    2014-08-05 22:43:23 回应
  • 离线乐观锁
    应该在任何系统的业务事务冲突中优先考虑(乐观锁)。悲观锁可以作为乐观锁的补充,因此不要考虑何时使用乐观锁,而应该考虑什么情况下光有乐观锁还不够。
    2014-08-06 22:16:58 回应
  • 远程外观(Remote Facade)
    我更倾向于粗粒度的结构和较少的远程外观。
    对于远程外观而言,最大的错误之一就是把领域逻辑放在其中。我再三强调:“远程外观没有领域逻辑。”任何外观都应该是一层薄薄的皮肤并且只负责很小一部分责任。
    2015-10-23 22:41:33 回应

红色有角F叔的其他笔记  · · · · · ·  ( 全部654条 )

注定一战
1
美国反对美国
1
哲学·科学·常识
1
计算机组成(第 6 版)
2
图解TCP/IP(第5版)
1
沸腾十五年
2
重新理解创业
8
雄性衰落
3
股市真规则
1
资本和收入的性质
2
存在主义是一种人道主义
3
程序员的职业素养
1
何为良好生活
1
活出生命的意义
3
货币的教训
3
Docker——容器与容器云(第2版)
2
政治的人生
4
中国巨债
3
深入浅出React和Redux
5
历史的教训
4
聪明的投资者
8
Designing Data-Intensive Applications
4
投资中最简单的事
5
供给的逻辑
1
逃不开的经济周期
1
图解服务器端网络架构
1
斯坦福极简经济学
3
政治的逻辑
4
原则
5
大数据之路
1
在苍茫中传灯
4
巴菲特传(纪念版)
1
中产阶级如何保护自己的财富
1
指数基金投资指南
4
模式分类
2
深度学习
1
我看电商
2
数据挖掘导论
1
中国国家治理的制度逻辑
2
漫步华尔街
2
尽在双11:阿里巴巴技术演进与超越
2
共同基金常识
3
企业IT架构转型之道:阿里巴巴中台战略思想与架构实战
6
未来简史
2
MySQL DBA修炼之道
1
大国大城
2
计算广告
4
机器学习
1
集体智慧编程
1
重新定义公司
1
Hadoop应用架构
1
第二性
6
硅谷钢铁侠
1
大数据
5
经营的本质
1
人人都是产品经理
7
你凭什么做好互联网
4
Spark机器学习
2
聊聊架构
8
游戏引擎架构
1
美国大城市的死与生(纪念版)
5
给大家看的Photoshop讲座
1
技术的本质
5
我们房地产这些年
2
行动的勇气
2
合作的进化
5
马克斯·韦伯与德国政治:1890—1920
6
数据库索引设计与优化
1
精益企业
7
高可用MySQL
2
发布!软件的设计与部署
2
项目管理艺术
2
右派国家
5
现实感
4
领域驱动设计
11
从0到1
1
高效程序员的45个习惯
1
可扩展的艺术
3
空之境界 上
1
成为技术领导者
1
改革的逻辑
3
修改代码的艺术
9
恰如其分的软件架构
7
软件开发者路线图
3
实现领域驱动设计
1
21世纪资本论
9
持续交付
16
构建之法
6
黑格尔导论
19
极端的年代
1
微服务设计
10
Site Reliability Engineering
5
测试驱动的面向对象软件开发
3
城市的胜利
2
对知识的恐惧
5
ZeroMQ
6
现代经济学主要流派
7
数学之美
2
程序员的思维修炼
1
大教堂与集市
1
一切坚固的东西都烟消云散了
5
兜售繁荣
1
数据科学与工程技术丛书
1
政治的细节(第10版)
8
发展研究指南(第二版)
2
代码大全(第2版)
2
The Datacenter as a Computer
3
无情的革命
6
新教伦理与资本主义精神
3
人类简史
7
Understanding MySQL Internals
2
他改变了中国
1
态度改变与社会影响
4
复杂
2
民主新论
19
人件
2
国家的常识
4
乌合之众
3
Web Operations
2
个人印象
4
湖上闲思录
2
自由及其背叛
7
C++语言的设计与演化
8
百年中国经济史笔记
1
改变
4
创新与企业家精神
5
Cassandra
3
不敢止步
4
意志力
2
通向财务自由之路
1
制造同意
6
美国种族简史
4
NoSQL Distilled
4
理解专业程序员
2
一个自由主义者的良知
4
政治经济学要义
2
施瓦辛格健身全书
2
房地产的繁荣与萧条
5
为学十六法
2
Akka in Action
1
Java虚拟机并发编程
3
软件工艺
3
面向模式的软件架构,卷3
1
动物精神
4
非理性繁荣
10
MongoDB权威指南
2
海量数据库解决方案
1
Erlang/OTP并发编程实战
1
学术与政治
12
Java并发编程实战
16
论中国
3
金融炼金术
4
多处理器编程的艺术
1
Effective java 中文版(第2版)
1
中國近代史(下冊)
6
系统之美
6
压力下的角逐
2
古代东方史
1
Go 语言程序设计
1
Remote
1
深入Linux内核架构
2
中國近代史(上冊)
3
隐秩序
1
空之境界(上下集合售)
1
开放社会
4
中国近代史八种
5
喀提林阴谋 朱古达战争
1
政治秩序的起源
5
现代性的后果
2
失去的胜利
9
了不起的盖茨比
5
许倬云说历史:台湾四百年
2
大规模分布式存储系统
1
C++网络编程(卷1)
2
在约定的场所
1
中国的宗教
2
了不起的盖茨比
1
希腊罗马名人传(全三册)
2
自私的基因
2
学龠
1
中国政治思想史
4
列克星敦的幽灵
1
人月神话
2
现代体系结构上的UNIX系统
1
虚拟机
2
朱熹的历史世界
1