阿里巴巴制定了这 16 条

转载自   阿里巴巴制定了这 16 条

本文内容整理自《阿里巴巴Java开发手册 1.4.0》,获取完整版请在公众号后台回复关键字:手册。

 


1、【强制】存储方案和底层数据结构的设计获得评审一致通过,并沉淀成为文档。

说明:有缺陷的底层数据结构容易导致系统风险上升,可扩展性下降,重构成本也会因历史数据迁移和系统平滑过渡而陡然增加,所以,存储方案和数据结构需要认真地进行设计和评审,生产环境提交执行后,需要进行 double check。

正例:评审内容包括存储介质选型、表结构设计能否满足技术方案、存取性能和存储空间能否满足业务发展、表或字段之间的辩证关系、字段名称、字段类型、索引等;数据结构变更(如在原有表中新增字段)也需要进行评审通过后上线。

2、【强制】在需求分析阶段,如果与系统交互的 User 超过一类并且相关的 User Case 超过 5 个,使用用例图来表达更加清晰的结构化需求。

3、【强制】如果某个业务对象的状态超过 3 个,使用状态图来表达并且明确状态变化的各个触发条件。

说明:状态图的核心是对象状态,首先明确对象有多少种状态,然后明确两两状态之间是否存在直接转换关系,再明确触发状态转换的条件是什么。

正例:淘宝订单状态有已下单、待付款、已付款、待发货、已发货、已收货等。比如已下单与已收货这两种状态之间是不可能有直接转换关系的。

4、【强制】如果系统中某个功能的调用链路上的涉及对象超过 3 个,使用时序图来表达并且明确各调用环节的输入与输出。

说明:时序图反映了一系列对象间的交互与协作关系,清晰立体地反映系统的调用纵深链路。

5、【强制】如果系统中模型类超过 5 个,并且存在复杂的依赖关系,使用类图来表达并且明确类之间的关系。

说明:类图像建筑领域的施工图,如果搭平房,可能不需要,但如果建造蚂蚁 Z 空间大楼,肯定需要详细的施工图。

6、【强制】如果系统中超过 2 个对象之间存在协作关系,并且需要表示复杂的处理流程,使用活动图来表示。

说明:活动图是流程图的扩展,增加了能够体现协作关系的对象泳道,支持表示并发等。

7、【推荐】需求分析与系统设计在考虑主干功能的同时,需要充分评估异常流程与业务边界。

反例:用户在淘宝付款过程中,银行扣款成功,发送给用户扣款成功短信,但是支付宝入款时由于断网演练产生异常,淘宝订单页面依然显示未付款,导致用户投诉。

8、【推荐】类在设计与实现时要符合单一原则。

说明:单一原则最易理解却是最难实现的一条规则,随着系统演进,很多时候,忘记了类设计的初衷。

9、【推荐】谨慎使用继承的方式来进行扩展,优先使用聚合/组合的方式来实现。

说明:不得已使用继承的话,必须符合里氏代换原则,此原则说父类能够出现的地方子类一定能够出现,比如,“把钱交出来”,钱的子类美元、欧元、人民币等都可以出现。

10、【推荐】系统设计时,根据依赖倒置原则,尽量依赖抽象类与接口,有利于扩展与维护。

说明:低层次模块依赖于高层次模块的抽象,方便系统间的解耦。

11、【推荐】系统设计时,注意对扩展开放,对修改闭合。

说明:极端情况下,交付的代码都是不可修改的,同一业务域内的需求变化,通过模块或类的扩展来实现。

12、【推荐】系统设计阶段,共性业务或公共行为抽取出来公共模块、公共配置、公共类、公共方法等,避免出现重复代码或重复配置的情况。

说明:随着代码的重复次数不断增加,维护成本指数级上升。

13、【推荐】避免如下误解:敏捷开发 = 讲故事 + 编码 + 发布。

说明:敏捷开发是快速交付迭代可用的系统,省略多余的设计方案,摒弃传统的审批流程,但核心关键点上的必要设计和文档沉淀是需要的。

反例:某团队为了业务快速发展,敏捷成了产品经理催进度的借口,系统中均是勉强能运行但像面条一样的代码,可维护性和可扩展性极差,一年之后,不得不进行大规模重构,得不偿失。

14、【参考】系统设计主要目的是明确需求、理顺逻辑、后期维护,次要目的用于指导编码。

说明:避免为了设计而设计,系统设计文档有助于后期的系统维护,所以设计结果需要进行分类归档保存。

15、【参考】设计的本质就是识别和表达系统难点,找到系统的变化点,并隔离变化点。

说明:世间众多设计模式目的是相同的,即隔离系统变化点。

16、【参考】系统架构设计的目的:

  • 确定系统边界。确定系统在技术层面上的做与不做。

  • 确定系统内模块之间的关系。确定模块之间的依赖关系及模块的宏观输入与输出。

  • 确定指导后续设计与演化的原则。使后续的子系统或模块设计在规定的框架内继续演化。

  • 确定非功能性需求。非功能性需求是指安全性、可用性、可扩展性等。


本文内容整理自《阿里巴巴Java开发手册 1.4.0》,获取完整版请在公众号后台回复关键字:手册。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/325693.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

中英文输入

一、鼠标: 1.是一种输入设备。 2.主要包括:左键,滑轮,右键。 3.常用的操作:移动,单击,双击,右击,拖拽。 二、键盘: 1.输入设备。 2.常用的键盘分为&#xff1…

JS中数组的常用方法

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title></title><script type"text/javascript">//创建一个数组var arr ["孙悟空","猪八戒","沙和尚"];/** push()* - 该方…

使用 Docker 让传统 .NET 应用程序现代化

15 年来&#xff0c;Microsoft .NET Framework 一直都是成功的应用程序平台&#xff0c;在旧版 Framework 和旧版 Windows Server 上运行的业务关键应用程序不计其数。这些传统应用程序仍具有很大的业务价值&#xff0c;但其维护、升级、扩展和管理难度可能很大。同样&#xff…

Mybatis中properties标签的使用

作用域&#xff1a;主配置文件SqlMapConfig.xml中 第一种写法&#xff01; value值使用${properties中property中name} 第二种写法&#xff1a; 创建文件&#xff1a;jdbcConfig.properties jdbc.drivercom.mysql.jdbc.Driver jdbc.urljdbc:mysql://localhost:3306/ee42 jd…

word文档编辑

一、微软公司office系列的产品之一。 二、一个文字处理的应用程序。 三、启动word: 右击–》新建–》word2007 四、word的界面&#xff1a; 1.文件选项卡 2.功能选项卡 3.标题栏 4.功能面板 5.文档编辑区 6.状态栏 7.滚动条 五、常用的快捷键&#xff1a; 1.保存&#xff1a;ct…

Spring Boot 配置加载顺序详解

转载自 Spring Boot 配置加载顺序详解 使用 Spring Boot 会涉及到各种各样的配置&#xff0c;如开发、测试、线上就至少 3 套配置信息了。Spring Boot 可以轻松的帮助我们使用相同的代码就能使开发、测试、线上环境使用不同的配置。 在 Spring Boot 里面&#xff0c;可以使…

JS中遍历数组的两种方式

方式一 for循环 //遍历arr&#xff0c;获取arr中Person对象for(var i0 ; i<arr.length ; i){var p arr[i];//判断Person对象的age是否大于等于18if(p.age > 18){//如果大于等于18&#xff0c;则将这个对象添加到newArr中//将对象放入到新数组中newArr.push(p);}}方式二…

.NET的一点历史故事:作者的一些感想

最近几天通过微博的头条文章平台公开连载了《.NET的一点历史故事》一书的部分草稿。不论是书名还是章节内容&#xff0c;目前真的是仅仅草稿阶段。所以这么早就以连载的方式发布出来&#xff0c;一方面是正在准备在蒙特利尔这边微软技术圈的两场演讲&#xff0c;需要自己尽快恢…

Excel电子表格操作

一、Dos命令才常用的操作&#xff1a; 1.打开Dos窗口&#xff1a;winr 2.切换盘符&#xff1a;直接写盘符&#xff1a; eg: d: 3.新建文件夹&#xff1a;md 文件夹名 4.进入文件夹&#xff1a;cd 文件夹名 5.返回上一级目录&#xff1a;cd… 6.查找本机ip地址&#xff1a;ipcon…

Mybatis中typeAliases标签和package标签

1、typeAliases 主配置文件&#xff1a; <typeAliases><typeAlias type"com.itheima.domain.User" alias"user"></typeAlias></typeAliases>映射配置文件&#xff1a; 2、package 主配置文件<typeAliases><!--<t…

我是怎么把一个项目带崩的

转载自 我是怎么把一个项目带崩的 我是一名项目经理&#xff0c;在过去的四个月里&#xff0c;我把一个项目带崩了&#xff08;上线后频出问题&#xff0c;用户无法使用&#xff09;。在最近的几天&#xff0c;我每天都在反思自己&#xff0c;我都在问自己以下几个问题&…

JS中数组去重

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title></title><script type"text/javascript">//创建一个数组var arr [1,2,3,2,2,1,3,4,2,5];//去除数组中重复的数字//获取数组中的每一个元素for(var i…

PPT 2010实现使用自定义主题付下载

直接入主题&#xff0c;首先我们打开PPT2010&#xff0c;如下图所示&#xff1a; 点击设计&#xff0c;找到浏览主题&#xff1a; 然后找到我们需要的主题&#xff0c;我已经整理了常用的40套&#xff1a; 最后完美更改

Mybatis中连接池介绍

连接池&#xff1a;我们在实际开发中都会使用连接池。以为它可以减少我们获取连接所消耗的时间mybatis中的连接池mybatis连接池提供了三种方式的配置&#xff0c;配置位置主配置文件SqlMapConfig.xml中的dataSource标签&#xff0c;type属性就是标识采用何种连接池方式type属性…

【深圳】.NET 技术分享交流会

随着微软Build 2017的召开&#xff0c;预期将发布.NET Core 2.0 Preview, 邀请深圳地区.NET技术专家和从业人员&#xff0c;一起分享与交流.NET 技术的发展方向,提高.NET技术氛围&#xff0c;发掘.NET高级人才&#xff0c;为改善.NET生态贡献一份力&#xff0c;使.NET技术在深圳…

JS数组中的剩余方法

<!DOCTYPE html> <html><head><meta charset"utf-8" /><title></title><script type"text/javascript">var arr ["孙悟空","猪八戒","沙和尚"];var arr2 ["白骨精",…

分布式作业 Elastic Job 如何动态调整

转载自 分布式作业 Elastic Job 如何动态调整 前面分享了两篇分布式作业调度框架 Elastic Job 的介绍及应用实战。 ElasticJob&#xff0d;分布式作业调度神器 分布式作业 Elastic Job 快速上手指南 Elastic Job 提供了简单易用的运维平台&#xff0c;方便用户监控、动态修…

好玩的Scratch

一、什么是scratch: 1.图形化编程工具 2.完全免费的软件 二、scracth窗口的主要区域&#xff1a; 1.角色区 2.程序区 3.积木区 4.舞台 5.功能按钮 6.新建背景 三、狐狸散步: 1.将原来的猫角色删掉&#xff0c;新加一个狐狸角色 2.新建山的背景 3.将积木拖动到程序区 四、scratc…

Visual Studio 2017 - Update 2预览版已发布

微软在继续通过Visual Studio Preview项目测试各类新功能&#xff0c;同时会通过公开发布的正式版测试这些新功能在现实世界中的表现情况。通过这种方式&#xff0c;开发者有机会及时了解正在开发的新功能&#xff0c;在开发的早期阶段向微软提供宝贵的反馈&#xff0c;借此为产…

移动WEB特效开发

一、触摸事件&#xff1a; 1.touchstart&#xff1a;手指刚接触屏幕时触发。 2.touchmove:手指在屏幕上移动时触发。 3.touchend:手指移开屏幕时触发。 eg: var span document.getElementsByTagName(“span”)[0]; var div document.getElementsByTagName(“div”)[0]; //手指…