报名参加CloudWeGo黑客松,奖金直推双丰收! 了解详情
写点什么

对软件架构和企业组织结构的思考

  • 2008-08-01
  • 本文字数:1123 字

    阅读完需:约 4 分钟

大企业的软件架构所面的挑战不但与技术有关,还与企业的组织结构有关。Dan Greenblog 最近在一篇博客里分析了软件架构与高效的组织结构在原则上的相似性,以之回答下面的问题:

企业结构与软件相似在哪里?对于两者的设计,有哪些实践是共通的?

作者特意从一个技术视角的、受环境影响的、特殊的观点入手去逼近所讨论的主题,使这篇文章更切合软件架构。他是这样立论的:

一家组织良好的企业,就像良好架构的软件,被分成一套规整的功能组件,分别承担各不相同的、预先定义的、清楚描述的角色。所有组件都能通过一种共同的、全体约定好的协议互相交流。最后,所有组件都被监控、维护、升级以及必要时被重构或者逐步淘汰。

乍看起来读者似乎只好祈愿自己所在的组织也能像上面说的那样定义良好而且高效。不过上面的一番比较其实是颇有帮助的,因为它阐述了一个威胁到大多数软件架构师的题目——对组织的管理,还点明了一个事实——其实架构师的工具箱里已经有了很多工具可以帮助他们把工作做好。Greenblog 从模块性开始阐述他的四大观点:

模块性可能是一家企业或者一个软件应该具备的最重要的性质。每个节点,不管是软件模块还是一队员工,得到的指令都是在一个大的背景下执行一项非常专门的任务;如果每个节点都能彼此协调,那么整体就能顺畅地运行。

接着谈到契约式设计(Design by Contract)原则和需求管理:

在软件开发里,程序员编写前置和后置条件来确立特定软件组件的角色。有了这些在设计时明确定义的界限,程序员就不太可能在代码里偷偷塞进不符合设计的额外功能。对于企业组织来说也一样,如果团队的使命定义明确,又符合团队成员所具有的技能,那么这个团队就很可能表现出色。如果团队的使命变了,那就要有一些检查取保证团队在新的定义下仍然能够正确地执行其职责。

当然也少不了消息模式:

在一行代码都没写的时候就把通信范式预先筹划好,并且在整个程序中都保持一致,程序员就能在增加新模块的时候给自己省下许多发明新消息系统的麻烦。

通信的概念对模块和团队都适用,团队和模块都会频繁地彼此互动,并且在互动中都要求为异步的、中断驱动的消息定义一套严密的 API,最好还要有一套基于事件的通知系统来处理这些消息。

接下来他谈到了一个严峻而真实的方面——软件和组织都需要重构:

一家公司,或者一个软件,就像任何有生命体一样受到生存法则的支配:适应或者灭绝。市场总是优胜劣汰的,要想始终站在高处就不能静止,只能去拥抱变化。

如果大公司里的软件架构师在求解架构的发展方向时能把网撒得更宽些,把组织的变化也包含在内,把在软件上运用原则也用来管理组织的变化,那么整个系统(包括程序和用户在内)都能取得更大的成功。

查看英文原文: Thoughts On Software Architecture and Corporate Structure

2008-08-01 17:482520
用户头像

发布了 225 篇内容, 共 67.3 次阅读, 收获喜欢 52 次。

关注

评论

发布
暂无评论
发现更多内容

一键洞察全量SQL ,远离性能异常

华为云开发者联盟

数据库 sql 大数据 数据治理 华为云

OpenKruise:Kubernetes 核心控制器 Plus

郭旭东

Kubernetes 云原生 OpenKruise

Vue+Springboot项目部署

ZRK

Vue 前后端分离 springboot 部署

Spring Boot中获取配置的一些方法

Geek_416be1

Spring Boot 2

Docker 镜像的备份恢复迁移

哈喽沃德先生

Docker 容器 微服务 镜像

一个空格引发的“救火之旅” - 记一次 SOFA RPC 的排查过程

阿里云金融线TAM SRE专家服务团队

【译】Amazon Aurora: Design Considerations for High Throughput Cloud-Native Relational Databases 上篇

米乐m6app苹果官网下载

分布式数据库 异步 Amazon Aurora 日志驱动

LeetCode题解:155. 最小栈,单个栈同时存储最小值,JavaScript,详细注释

Lee Chen

大前端 LeetCode

Redis常见问题--单线程

是老郭啊

nosql redis 线程

向云再出发:如数据般飞驰的内蒙古

脑极体

controller-manager的主动驱逐

Geek_f24c45

Kubernetes k8s

mPaas研发流程和线上运维介绍

阿里云金融线TAM SRE专家服务团队

ios android

深入了解 Rust 异步开发模式

lipi

rust 异步

银行大数据新玩法,构建“一湖两库”金融数据湖

华为云开发者联盟

大数据 数据湖 FusionInsight MRS DWS

Redis常见问题--哈希冲突

是老郭啊

哈希表 Redis项目

JAVA,.NET项目开发难上手?Learun敏捷开发框架解君愁

Philips

Java 敏捷开发 .net core

新基建迎来风口 新人才仍有缺口

CECBC

人工智能 新基建 数字化基础

5G边缘计算:开源架起5G MEC生态发展新通路

华为云开发者联盟

开源 5G 边缘计算 公有云 EdgeGallery

一文带你深扒ClassLoader内核,揭开它的神秘面纱!

我没有三颗心脏

Java ClassLoader java基础 类加载器

消息队列之事务消息,RocketMQ 和 Kafka 是如何做的?

yes

分布式事务 RocketMQ kafak 事务消息

开发任务管理分析报告

森林

人民版权 获2020中国产业区块链创新奖

CECBC

区块链 产业发展 版权

Spring整合WebSocket

牛初九

NodeX Component - 滴滴集团 Node.js 生态组件体系

滴滴普惠出行

Redis 持久化--AOF

是老郭啊

redis redis持久化 aof

10万奖金等你拿!2020第四届易观OLAP算法大赛火热开启

易观大数据

开发者的福音,LR.NET模块化代码生成器

Learun

Java 敏捷开发 .net core 计算机程序设计艺术 软件设计

大事情!中国限制 AI 算法出口。网友:这是要阻止XX“下跪”

程序员生活志

JVM 内存模型、字节码、垃圾回收面试要点

escray

学习 面试 垃圾回收 字节码

数字化转型需要低/零代码平台的支持

代码制造者

低代码 数字化转型 企业信息化 零代码 编程开发

易观CTO郭炜:如何构建企业级大数据Ad-hoc查询引擎

易观大数据

对软件架构和企业组织结构的思考_架构_Mark Figley_InfoQ精选文章