软件设计的风格

1

风格对于软件系统,犹如文化对于人类社会,对于组成系统的各个要素(无论模块、组件、对象还是函数),都会施加影响,只要是在运用该风格的边界范围之内。

这种风格影响如文化烙印一般,体现出一种强烈的一致性。当然,一旦选错了风格,那就好像17世纪中,五月花的落魄船员们闯入了印第安人的部落,可能会是混乱、风格的格格不入。

2

Roy Fielding对风格的定义为:

风格是一种用来对架构进行分类和定义它们的公共特征的机制。每一种风格都为组件的交互提供了一种抽象,并且通过忽 略架构中其余部分的偶然性细节来捕获一种交互模式(pattern of interation)的本质特征。

这个定义有两个关键词:

  • 分类
  • 共同特征

这两个关键词皆与抽象有关。

同时,这句话还提及了风格与协作之间的关系,即它是对协作的抽象。架构风格应不涉及详细设计细节,需要找出那些稳定不变的本质特征,且这个特征是与系统的目标与需求是相匹配的。

3

Roy Fielding在论文《架构风格与基于网络的软件架构设计》中写道:

网络研究则恰恰相反,集中于系统之间普通的通信行为的细节和提高特殊通信技术的性能,却常常忽略了一个事实,即改变一个应用的交互风格对于性能产生的影响要比改变交互所使用的通信协议更大。

这事实上体现了宏观架构与微观架构之间的关系,二者应该保持一致。当然,宏观架构的影响是战略的影响,微观架构的影响是战术的影响,在分而治之的架构原则下,微观架构产生的影响虽然存在,但影响主要还是发生在局部。

4

画出自己的边界线,在边界之内保证风格的一致性。边界外,看待风格的一致性又有另外的标准。

风格对设计起指导作用,并由此驱动对一系列架构属性的满足。架构属性还包括对架构的约束,这些约束一方面能够对设计与实现进行规范,另一方面也可以减少选择项,让设计变得更为简单。

5

一种架构风格是一组协作的架构约束,以及在任何一个遵循该风格的架构中允许存在的元素之间的关系。

将风格视为约束是合理的,但约束更像是对一个封闭的大的集合中的裁剪,规定你不能做什么。风格不仅要规定你不能做什么,还要告诉你应该做什么,它要处理的是一个开放的大的空间,我们需要找到该空间内和谐的内容,并把不和谐的部分剔除出去。剔除出去的这部分内容其实就是违背了架构约束的内容。

架构风格强调的是软件架构的不同方面,一种特定的架构可能有多种架构风格组成。这就体现了架构风格是有层次的。

为了保证架构的一致性,需要在整体层面体现为统一的架构风格,而在不同边界内,展现另外的架构风格。换言之,这种风格的多样性与隔离性,以及风格的层次其实是与架构的层次相对应的。

6

对于设计风格而言,除了要保证风格的一致性外,关键的是要找到一种与正在解决的问题最为匹配的风格。

要了解自己需要解决的问题,同时还要了解不同的架构风格的特征与优缺点,清楚地知道这些架构风格究竟适合处理哪种场景。

原文发布于微信公众号 - 逸言(YiYan_OneWord)

原文发表时间:2017-08-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏人称T客

SAP与Oracle战火从未停止 看SAP如何反击?

这是SAP HANA曾经反击的文章,今天再次翻出来阅读觉得意味深远。由于过于技术对于两家到底谁优谁劣一直没有定论,不过从SAP HANA问世起至今,SAP和Or...

3146
来自专栏進无尽的文章

益思维-iOS 开发中的上帝模式与农民模式

我在做 iOS 开发的时候,发现自己在写程序的时候,常常处于两种状态的切换,我把这两种状态称为软件开发的上帝模式与农民模式。我先给大家介绍一下这两种模式的特点。

932
来自专栏SDNLAB

智囊团:亓亚烜SDN分享的应用与实战

大家好,我是云杉网络亓亚烜,名字不好读,叫我yaxuan即可。今天主要跟大家交流下SDN与网络虚拟化的东西。希望多多提问,我会分享云杉的实战经验。 云杉网络主要...

3358
来自专栏斑斓

《AngularJS深度剖析与最佳实践》推荐序

这是一本具有强烈ThoughtWorks项目风格的书。书中打造的实战项目,完全遵循了ThoughtWorks工程实践,一步一步从最初的Skeleton通过快速迭...

2756
来自专栏编程

自学iOS开发,从新手小白到高级工程师正确的打开方式

自己目前大四汪一枚,自学iOS开发一年左右,先后学习了swift和Objective-C。由于是自学(而且全院貌似就我一个人在学),深知自学之痛。所以在此分享一...

2208
来自专栏Bug生活2048

一份Excel映射出一名普通程序员的成长之路

记得刚毕业的时候,临时抱佛脚背了点题,也算人品不错入职了一家公司,正式成为了一名程序员。

993
来自专栏机器人网

无人机飞行控制器电路设计及仿真实验结果

在无人机飞行控制系统中,飞行控制器是其核心部件,它负责飞行控制系统信号的采集、控制律的解算、飞机的姿态和速度,以及与地面设备的通讯等工作。随着无人机越来越广泛的...

39810
来自专栏张善友的专栏

MindManager: Draw your own MindMap!

─ 什么是 MindMap ? MindMap 是一种看起来很像树形图的东西,不过比树形图还强力得多(笑)。 一般人在记笔记、或规划事情的时候,多半只有两种方法...

1558
来自专栏Java学习网

4个费劲心思却走向编程地狱的陷阱

4个费劲心思却走向编程地狱的陷阱 优化你的代码、创建编程抽象、编写跨平台的应用程序,几乎所有遵守这些戒律的程序员不出意外都拿着一等票去往了一个没有休憩时间,项目...

2178
来自专栏Ben嘴Ben舌

致想给遗留系统写自动化单元测试的开发团队——事件风暴之父的工作坊实录之二:软件开发设计

一家大型企业的关键业务代码已经年久失修成为了难以维护的遗留代码,有着硅谷高科技企业软件开发管理经验的高管决定在企业内部搞编写单元测试和重构的极限编程实践。这需要...

573

扫描关注云+社区