最新发布《数智时代的AI人才粮仓模型解读白皮书(2024版)》,立即领取! 了解详情
写点什么

系统级复用的成功要素

  • 2010-08-24
  • 本文字数:3565 字

    阅读完需:约 12 分钟

系统级的复用需要人、过程和技术决策之间的相互作用,而且这一切必须在真实环境的约束下进行。是否有成功要素能让复用与众不同吗?我相信有!这篇文章提供的 5 个成功要素会对此有帮助,它们是:捕捉领域差异,易于集成,深入研究设计,高效的团队工作和管理领域的复杂性。

捕捉领域差异

对于系统级复用来说,获取必要的领域变化是非常重要的。业务领域充满了变化,需要通过你的代码库进行定义和管理。如何应对产品线的变化是软件有效复用的核心问题。为了在你的领域内定义这些变化,你需要寻找相关的业务专家以及该领域的终端用户。贴近这些专家和用户,与他们一起工作,你才能更好的了解领域知识、各方面的趋势变化,以及这些变化是如何体现在用户故事中的。从客户的角度看,相对于他们的业务功能来说,这些变化是非常自然的。你不仅要花时间确保了解整体上的变化,同时还要认识到这些变化的子集真正意味着什么。

从务实的角度看软件复用,你会发现去定义某一问题领域的所有变化是不现实的。除非你能引入并把领域变化作为你的开发实践的一部分,否则你的迭代很难进行,工作软件也不会正常发布。从设计的视角来看有些问题能够帮助你。每次你看到用户故事时,你都应该问自己:

  1. 会引入哪些领域实体?
  2. 是否是第一次遇到这些领域实体?
  3. 是否在一个以上的产品或应用系统中用到这个故事?
  4. 在故事中业务领域的什么方面发生了变化?一些通用的变化往往会重现──经常使用某个或几个功能的那类用户,一个功能或一组功能的行为差异,有多少功能被绑定在一起作为业务标准,界面隐喻和主题,报表 / 图表功能。
  5. 这些用户故事集或用户故事的某些方面是否常常一起出现?

易于集成

系统级复用很容易被忽视的一个方面就是可复用资产的集成,包括应用系统、流程和服务。大多数团队聚焦于构建大型可复用的资产库──服务,对象,框架和领域特定语言库。虽然这是必要的,但对于成功的系统级复用来说,这是远远不够的。一个重要的组成部分就是易于集成。什么意思呢?具体来说就是:

  • 评估需求并做决定是否现存的资产能够完全满足需求(或是需要修改),或者需要开发新功能
  • 通过集成可复用资产来应对风险(满足服务水平协议(SLAs),解决方案复杂性等)
  • 通过有效接口(有 java 接口?还是 web 服务?)来共享信息。
  • 提供样例代码和集成设计模式
  • 提供全面的错误代码列表和错误处理建议──如果服务出现了特殊错误,用户该怎么办?是否存在需要用户特别注意的业务错误或数据校验错误?
  • 确保客户并不缺少可复用资源──基于服务的复用能力是必不可少的,多个用户可以同时调用同一服务
  • 通过测试集成提供帮助(提供测试数据,单元测试代码,以及测试响应时间 / 吞吐量等实用功能)

你可以建立一个服务目录,并寄希望它可以达到很高的复用程度,但大多数情况下你会失望的。伸出手去帮助你的客户,帮助他们成功。让评估、集成和测试变得更加容易。不要着急,但要确保你的团队走在正确的路上,而不是你试图向他们“兜售”复用的价值。

理解设计

构建可复用资产时,并不是只有一条正确的路。你的业务目标、技术环境、迭代和发布计划对设计决策的时间和性质都会造成影响。重构现有代码满足业务目标,也是由上下文环境来驱动的。需要考虑的问题包括:

  1. 什么产品功能通常会整合在一起?
  2. 与其他那些相对全面的产品比较,是否能做出一些不同的特点?
  3. 是否有可能在运行时和设计时改变产品特征?

所有的这些问题都会指导设计。例如,如果设计目标是支持运行时的可变性,你就需要支持在不改变代码或不重启应用的情况下动态增加新的参数。当你进行设计工作时,必须随时考虑相关领域的变化。

举个例子来说,一个小装饰品商店,需要在市场上推广商品。用户故事是根据小装饰品的类型生产不同的市场标签。可能的几个需要支持的变化是:标签信息改变的频率,文字数量,语言,数据格式,组成标签的静态信息和动态信息等。

由于领域的复杂度,一些特性会同时发生变化或单独发生变化。应该考虑这些变化及其对设计的影响:

  1. 标签内容仅供静态内容──你可以用一个独立的基于配置文件的标签生成器。
  2. 标签内容包括静态内容和动态内容──现在标签生成器需要两个子组件:静态内容生成器和动态内容生成器。
  3. 标签内容包括静态内容和动态内容。静态内容是多语言的。──除了内容生成之外,你还需要一个国际化组件支持多语言。
  4. 标签内容包括静态内容和动态内容。静态内容是多语言的。还需要根据国家设置不同的日期和货币格式──所有以上三个组件还需要增加本地化的日期格式和货币格式。

下次你开始一个项目时,会更多的了解在你的问题域内由于变化带来的驱动力。你的领域及其相关联的上下文环境会驱动软件资产的复用。你越多的了解这种驱动力,就会越容易决定什么软件资产需要复用以及如何进行复用。

高效的团队工作

与非常有趣而且高效的团队一起工作时,我终于相信复用带来的成功多于技术的光辉和优雅的设计。伟大的团队生产高质量的工作产品,相互理解,包括他们的优势和局限性,最重要的是能够把思想的碰撞与冲突转化为健康的有建设性的对话和创新、创造。

为什么团队工作和系统级复用有关呢?这是因为,在生产可复用资产的过程中会遇到各种问题,包括严格的期限和交付压力,与遗留系统和流程进行集成,与很多跨组织跨地域的部门和团队合作,同时还要发布高质量的产品,在这些情况下进行复用是非常艰难的。这是一种挑战,激励着技术领袖和专家去工作并达成目标。

系统级复用的基本概念是很好理解的,能够把这些达成复用的成功者区别出来的是,他们通过帮助那些水平相对较低的开发团队来实现业务领域复用的愿景,他们具备这样的能力。每件事都很重要,包括每个组件,服务和资产。

特定小组经常相互交流,交换思想,协作变得更加有效,大部分的风险被识别和缓解,这些保证了团队是成功的作为一个整体来工作。听起来是不是很像敏捷宣言?这并不是巧合!构建可复用的服务需要创造性的头脑风暴,解决冲突,设计整合,直到到达一个逻辑点,可以进行你的迭代开发。这可不是一件事──包括迭代,持续关注和聚焦执行。如果你的团队充满了创造力而且能够持续交付,那么系统级复用会自然的成为开发的副产品。

管理领域的复杂度

你的领域可能是复杂的,而且需要支持丰富的变化。考虑到你可能受到的限制,去捕捉全部的复杂性既不现实也不可行。此外,你的业务系统不可能支持相关问题领域的所有变化。幸运的是大部分的领域变化能以用户故事的形式来表述,而且你能从持续的迭代和发布中找到相关模式,更好的了解这些变化。决定管理复杂度的子集是一门艺术,在这一点上你需要不断的与团队的人进行合作。

我使用一套简单策略来寻找那些具有必要业务复杂度的领域。下面的列表并不全面,但是可以帮助你寻找感觉,看看哪些因素能驱动复杂度:

  • 数据采集:系统可能有多重用户角色,以及各种数据,对这些用户和数据的验证以及执行的规则都是不同的
  • 地理信息:基于地理的区域 / 国家 / 州的变化,包括不同的语言和日期 / 时间格式
  • 合并产品特征(也叫捆绑):支持不同产品偏好的变化(例如基本版支持 X、Y 和 Z 特征;专业版支持 X、Y 和 K 特征;精装版支持 A、X、Y 和 K)
  • 授权:访问系统不同功能的变化,并执行不同的任务,以及相关用户群体和交易行为
  • 交易行为:货币限制方面交易行为的变化,批准和验证规则,业务异常如何处理
  • 渠道(也叫分销渠道或销售渠道):产品的有效性,特征的有效性,安全,客户支持,频繁的各类市场交流,等等

下次你再去检查用户故事,可以把它放到你的领域策略中去验证。这是迭代中的常用模式么?如果是的话,你应该把它加入到你的系统级复用的规划中。如果在你的设计中并没有从开始就贯彻管理领域复杂度的理念,没关系,不要恐慌。并不需要在着手进行前期设计的时候就努力去管理所有的复杂度。你应该把认识和行动区分开。对相关领域认识的增加会帮助你把系统复用的成果与业务需求和迭代目标结合起来。以此作为重构的指导会帮助你在代码库方面做出明显的改进。

结论

本文阐述了一些成功要素,有助于达成系统级的复用。在没有对问题领域进行管理和有效理解的情况下,去设计可复用资产并作为能够满足业务需求的有用投资,其实是没有意义的。实现高效的团队工作,为客户提供简易的集成方式,这些都可以增加复用成功的可能性。

关于作者

本文作者是资深的软件专业人士,致力于构建可复用的数据服务和业务流程自动化组件。他开发过很多软件项目,项目类型从单用户系统到大型的、分布式、具备多种服务的多用户平台都有涉及。他是即将发布的一本关于 SOA 书籍的贡献作者,他还是敏捷技术的演讲者。他的关于系统软件复用的博客地址是 http://www.artofsoftwarereuse.com/

查看英文原文: Success Factors for Systematic Reuse


给 InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家加入到 InfoQ 中文站用户讨论组中与我们的编辑和其他读者朋友交流。

2010-08-24 00:003278

评论

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

译文 | 四张画布教你判断「产品开发优先级」

LigaAI

产品经理 产品开发 画布 产品优先级

webrtc BitrateAllocator 带宽分配器

webrtc developer

WebRTC

没有7年经验你真学不会这份SpringCloud实战演练文档

公众号_愿天堂没有BUG

Java 编程 程序员 架构 面试

文件上传绕过思路拓展

网络安全学海

黑客 网络安全 信息安全 渗透测试 安全漏洞

立于山巅!他,凭什么抗住万亿级流量冲击!

博文视点Broadview

❤️专科出身拿到阿里offer,我直呼666!【付硬核面试】❤️

编程susu

Java 编程 程序员 面试 计算机

入职京东:成功拿到offer薪资30K「面试经历+面试真题」

今晚早点睡

Java 秋招

石油行业数据采集中的 MQTT 协议

EMQ映云科技

数据 mqtt emq 远程监控 实时数据

20年IT老民工苦心编撰成超大流量分布式系统架构解决方案文档

公众号_愿天堂没有BUG

Java 编程 程序员 架构 面试

如何优雅的在业务中使用设计模式(代码如诗)

小呆呆666

flutter android 大前端 设计模式

简述 Linux I/O 原理及零拷贝(上)— 磁盘 I/O

Qunar技术沙龙

Linux 缓存 Mmap 磁盘 I/O

终于有大牛把Spring微服务架构设计第2版文档给整理完毕了

公众号_愿天堂没有BUG

Java 编程 程序员 架构 面试

MySQL 不完全入门指南

Java 编程 架构 面试 架构师

微服务的痛:你的微服务还好吗?

我爱娃哈哈😍

架构设计 架构设计实战

fil矿机1T一天可以挖多少币?fil矿机能挖多久?

fil矿机能挖多久 fil矿机1T一天可以挖多少

华为高级技术专家多年经验分享微服务治理体系、架构及实践文档

公众号_愿天堂没有BUG

Java 编程 程序员 架构 面试

堡垒机和跳板机的三大区别分析-行云管家

行云管家

运维 堡垒机 IT运维 跳板机

软件测试框架之——Postman参数化(超详细小白教程)

程序员阿沐

软件测试 自动化测试 接口测试

影像篡改与识别(一):胶片时代

腾讯安全云鼎实验室

影像 暗房技术 篡改识别

DEX去中心化交易所自动刷量机器人开发|去中心化做市机器人

Geek_23f0c3

去中心化交易所系统开发 量化交易机器人系统开发 量化机器人 做市机器人 自动刷量机器人

论坛接口测试——Postman数据驱动(超详细小白教程)

程序员阿沐

编程 程序员 软件测试 自动化测试 接口测试

ipfs矿机公司星际联盟是什么公司?星际联盟ipfs矿机靠谱吗?

分布式存储 IPFS Filecoin ipfs挖矿 ipfs矿机

DEX去中心化交易所自动刷量机器人开发|去中心化做市机器人

量化系统19942438797

去中心化 做市机器人

简单、快捷、低成本的超写实虚拟人平台来了……

百度开发者中心

人工智能 AI 最佳实践 虚拟人 前沿技术

短视频询盘获客系统开发案例解析

获客I3O6O643Z97

抖音、快手获客系统 抖音矩阵拓客

fil挖矿怎么挖?fil挖矿成本是多少?

fil挖矿怎么挖 fil挖矿成本是多少

由阿里三位专家撰写:数据库高效优化:架构、规范SQL技巧文档

公众号_愿天堂没有BUG

Java 编程 程序员 架构 面试

【等保测评】黑龙江等保测评机构详细信息说明

行云管家

网络安全 等保 等级保护 等保测评

一文带你掌握 OceanBase 社区版部署细节及原理

OceanBase 数据库

数据库 分布式数据库 oceanbase OceanBase 开源 OceanBase 社区版

摩尔时代如何押注AI算力?英特尔战术大揭秘

科技新消息

解密优酷智能生产技术,看 AI 赋能内容数字化

阿里云视频云

音视频 短视频 视频处理 视频制作 视频云

系统级复用的成功要素_架构_Vijay Narayanan_InfoQ精选文章