专栏首页斑斓软件设计的风格

软件设计的风格

1

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

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

2

Roy Fielding对风格的定义为:

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

这个定义有两个关键词:

  • 分类
  • 共同特征

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

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

3

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

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

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

4

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

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

5

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

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

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

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

6

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

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

本文分享自微信公众号 - 逸言(YiYan_OneWord),作者:张逸

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

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

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 美丽的架构

    美丽的架构究竟是怎样的?架构师们上下求索,孜孜以求,始终不得其解。归根结底,美丽这个词语总还是偏于感性认识,就仿佛音乐之美,绘画之美,不能以尺度来衡量,追求的其...

    张逸
  • 限界上下文的菱形对称架构

    我在GitChat上最新开通了一个Chat,主题为:限界上下文的菱形对称架构。为有利于搜索,更名为:领域驱动设计的菱形对称架构,但主要针对的是领域驱动设计的核心...

    张逸
  • 系统架构 | 软件架构的一致性

    在Brooks的力作《设计原本(The Design of Design)》一书中,提及“一致性”对软件的重要性。他认为:“一致性应该是所有质量原则的根基。好的...

    张逸
  • 如何解决架构与业务发展冲突?讯飞输入法Android架构演进

    IT大咖说
  • 电商设计V1(一):软件工程设计

    数据架构不仅仅要考虑开发中涉及到的数据库,实体模型,也要考虑物理架构中数据存储的设计

    一枝花算不算浪漫
  • 「企业架构」使用TOGAF 企业连续体对架构描述进行分类

    在此之前,我写过关于数字化变更功能以及企业架构如何支持并为您的组织提供价值的需求。我还讨论了如何在不同的抽象层次上对架构描述进行分类。但是有一个方面我没有深入研...

    首席架构师智库
  • 「软件架构」软件架构概述

    软件架构(architecture)是指软件系统的基本结构以及创建这种结构和系统的规程。每个结构都包含软件元素、它们之间的关系以及元素和关系的属性。[1]软件系...

    首席架构师智库
  • 经典游戏服务器端架构概述(上)

    架构的分析模型 一、 讨论的背景 现代电子游戏,基本上都会使用一定的网络功能。从验证正版,到多人交互等等,都需要架设一些专用的服务器,以及编写在服务器上的程序。...

    韩伟
  • 直播倒计时 | 云函数开发者工具实操

    他是谁? 讲师:腾讯云高级产品经理张远哲。一直从事云计算相关产品工作。参与过小程序平台的研发,KMS产品的研发,以及Kafka集群DevOps的搭建。现担任云...

    腾讯云serverless团队
  • 5G时代来临,前端开发工程师必须了解的音视频入门基础知识

    本文将给大家进行音视频基础的常规知识点的梳理。当然,短短的一篇文章并不能让大家立即变成音视频领域的专家,但这些知识点已经基本涵盖了音视频的入门知识。我们将按照下...

    IMWeb前端团队

扫码关注云+社区

领取腾讯云代金券