当前位置: 首页 > 编程日记 > 正文

架构师的第一阶段:准备做(Pre-Architecture)

上节说到,做任何事情都可以分为三个阶段:准备做、做、做好。本文,就将进入第一个阶段,准备做阶段。

Pre-Architecture:准备架构

准备架构阶段,最最重要的是弄清楚要做什么东西,即掌握用户需求。应该来说,整个准备阶段都围绕着“需求”来转。

我将它描述为如下过程:需求-->约束-->质量-->关键功能

初学者根据上诉步骤,一步一步来,就能够完成准备架构阶段。

1.需求

可能有人会认为“需求应该来自市场人员”,这句话并不全面,需求不应该仅仅来自市场人员。

记得本人接手的第一个项目时,市场人员告诉研发部门需要研发出一款产品,研发部门会成立一个项目小组,然后再指定一个研发人员做需求调研,写需求列表,这个做法现在觉得是非常不合理的。首先,研发人员没有市场经验,更不懂用户想要什么产品,就只能够照着别的公司的产品抄,最终肯定是抄个四不像。

下面回到话题,需求应该来自哪里?应该是一拨人讨论出来的结果,这拨人就应该包括:市场人员+产品经理+架构师+项目经理。首先一款产品是否需要做,这是市场人员和产品经理所讨论的范畴,他们决定该如何定位此款产品,产品经理根据公司的技术实力,决定能否做。那么,接下来便是了解用户需求,前期的调研工作需要市场人员来做,并形成一个“初步需求列表”。有了“初步需求列表”,架构师和项目经理就应该考虑,并弄清楚每条需求,这里为什么需要项目经理的参与呢,就是为了保证该项目的负责人能够最清晰的明确做什么,接下来才能带领队伍把握关键指标。

架构师在考虑需求的时候,如果只是笼统的来了解每个功能,这样各种需求混在一起就显得比较乱,最好可以参考ADMEMS矩阵法来进行划分:

ADMEMS矩阵法
广义功能质量约束
业务级需求业务目标快、好、省

1.技术性约束

2.法规级约束

3.技术趋势

4.竞争因素与竞争对手

5.遗留系统集成

6.标准性约束

7.分批实施

用户级需求用户需求运行期质量

1.用户群特点

2.用户水平

3.多国语言

开发级需求行为需求开发期质量

1.开发团队技术水平

2.开发团队磨合程度

3.开发团队分布情况

4.开发团队业务知识

5.管理:保密要求

6.管理:产品规划

7.安装

8.维护

从表中可以看出需求是分为层次的。

业务级需求:包含客户或出资者要达到的业务目标、预期投资、工期要求,以及要符合哪些标准、对哪些遗留系统进行整合等约束条件;

用户级需求:用户使用系统来辅助完成哪些工作?对质量要求如何?用户群及所处的使用环境方面有何特殊要求?

开发级需求:开发人员需要实现什么?开发期间、维护期间有何质量考虑?开发团队的哪些情况会反过来影响架构?

对于此三类需求弄清楚之后,就可以形成一个初步的需求列表。

基本上来说掌握ADMEMS矩阵表,前期的准备工作就算做完了。下面的小节是对其他概念做更加详细的解释。

2.约束

前面说了,整个阶段都是围绕“需求”来转,接下来的“约束”、“质量”都是对需求做限制的。那么何为“约束”?

约束:制约项目发展的因素。

首先,约束来自与需求又制约需求,比如“用户级需求”中提到了“用户群特点”的约束,就说明,本产品必须要考虑针对哪些用户群来做,要做一个儿童教育软件,就不应涉及成人的复杂理论和逻辑。这就是约束!

3.质量

质量,类似于“约束”,它更重视某一事物具备的属性。当然,有些时候可以把质量属性来当做约束,比如可移植性,可以把它看做是质量也可以当做一种约束来看。

那么,作为一个架构师该考虑哪些质量属性呢?

1.性能  2. 安全性 3.持续可用性 4.可靠性 5.鲁棒性 6.易用性 7.可测试性 8.可重用性 9.可维护性 10.可扩展性 11.可移植性 12 可互操作性。

也不是说用户要把每一个指标都做上去。有些指标之间是相互影响的。其影响关系如下(+表示促进  -表示影响  空白表示无明显作用):

性能安全性持续可用性可互操作性可靠性鲁棒性易用性可测试性可重用性可维护性可扩展性可移植性
性能
安全性
持续可用行++
可互操作性++
可靠性++++++
鲁棒性++
易用性+
可测试性++++
可重用性+++++
可维护性+++
可扩展性+++
可移植性++++

架构师应该确定关键质量的优先级。并在《架构文档》中明确记录此要求。

4.关键功能

关键功能包含如下四个方面:1.核心功能;2.必做功能;3.高风险功能;4.独特功能。

如何区别这四个方面,实际上是靠经验和感觉。它们之间实际上是有重叠部分的。

核心功能:业务层接口所反映的功能。如,项目管理系统中,项目信息查看、添加任务等都属于核心功能;

必做功能:必做功能实际上是以客户为背景的,简单来说就是愿景;

高风险功能:顾名思义,哪些功能操作可能会涉及到安全和隐私等问题;

独特功能:实际是上诉上个功能的补集,看看还有哪些没有覆盖到的,却又很关键的功能。

架构师在设计阶段要考虑到“关键功能”所占有的比例,没有明确的标准,一般遵循:功能少的系统比例高一些,功能多的系统比例少一些。

总结

总得来说,准备阶段要做的最重要的一件事,就是弄懂需求,不管通过何种方式剖析和理解,只要弄懂架构的需求就算完事了!

转载于:https://www.cnblogs.com/movezzzz/p/3328411.html

相关文章:

iOS动画系列之八:使用CAShapeLayer绘画动态流量图

这篇文章通过使用CAShapeLayer和UIBezierPath来画出一个动态显示剩余流量的小动画。 最终实现的效果如下: Paste_Image.png 动态效果图: shapeLayerAni.gif 1. CAShapeLayer 实际中,能够用CALayer完成的任务是比较少的,如果使用这…

hiho_1139_二分+bfs搜索

题目 给定N个点和M条边,从点1出发,到达点T。寻找路径上边的个数小于等于K的路径,求出所有满足条件的路径中最长边长度的最小值。 题目链接:二分 最小化最大值,考虑采用二分搜索。对所有的边长进行排序,二分&#x…

Hadoop集群搭建(七:MySQL的安装配置)

实验 目的 要求 目的: 1、掌握MySQL在集群平台中的安装 要求: 完成MySQL的集群版的安装;MySQL集群的相关服务进程能够正常启动;MySQL集群的SQL服务能够作为系统服务开机自动启动;MySQL客户端能够远程连接MySQL集群的…

如何在VMware虚拟机上安装Linux操作系统(Ubuntu)

作为初学者想变为计算机大牛非一朝一夕,但掌握基本的计算机操作和常识却也不是多么难的事情。所以作为一名工科男,为了把握住接近女神的机会,也为了避免当白痴,学会装系统吧!of course为避免把自己的电脑作为牺牲品&am…

cf #363 b

B. One Bombtime limit per test1 secondmemory limit per test256 megabytesinputstandard inputoutputstandard outputYou are given a description of a depot. It is a rectangular checkered field of n  m size. Each cell in a field can be empty (".") or…

swift-video-generator:图片加音频生成视频及多视频合并库及演示

阅读 80收藏 92017-11-07原文链接:github.com腾讯云学生优惠套餐,985高校学习云计算的主力机型,2G2核,1M带宽系统盘(Linux 50G/Windows 50G)免费赠送50GB对象存储空间还有.cn域名一年使用权!不要…

Hadoop集群搭建(八:Hive的安装配置)

实验 目的 要求 目的: (1)掌握数据仓库工具Hive的安装和配置; 要求: 完成Hive工具的安装和配置;Hive工具能够正常启动运行;Hive控制台命令能够正常使用;能够正常操作数据库、表、…

iOS 富文本编辑工厂, 让书写更简便.

由于最近常用富文本, 在编辑一个富文本时需要操作很多的属性, 书写起来很不方便. 所以我将这些相关属性整理并使用链式方式将它简化了一下. 效果请看下面Demo. 项目工程 实现很简单, 我嘴太笨, 这里就不介绍了, 如有兴趣直接看源码吧. 同时可以通过cocoapods来使用它. pod SJAt…

ORACLE 数据的逻辑组成

数据块(block)Oracle数据块(Data Block)是一组连续的操作系统块。分配数据库块大小是在Oracle数据库创建时设置的,数据块是Oracle读写的基本单位。数据块的大小一般是操作系统块大小的整数倍,这样可以避免不…

Java 的zip压缩和解压缩

Java 的zip压缩和解压缩好久没有来这写东西了,今天中秋节,有个东西想拿出来分享,一来是工作中遇到的问题,一来是和csdn问候一下,下面就分享一个Java中的zip压缩技术,代码实现比较简单,代码如下:…

Hadoop集群搭建(九:各服务的启动)

1、查看Zookeeper服务状态,若集群中只有一个"leader"节点, 其余的均为"follower"节点,则集群的工作状态正常 $zkServer.sh status 2、在集群中所有主机上使用此命令,启动Zookeeper服务 $zkServer.sh start…

iOS 后台下载及管理库

说起下载第一个想起的就是ASI。一年前接手的新项目是核心功能是视频相关业务,在修改和解决视频下载相关的问题的时候让我体会到了ASI的下载的强大。后来新需求需要视频后台下载,使用NSURLSession的时候,更加深刻的体会到了ASI的强大好用。后来…

(转) 使用Speech SDK 5.1文字转音频

下载地址: http://www.microsoft.com/en-us/download/details.aspx?id10121 SeppchSDK51.exe 语音合成引擎 SpeechSDK51LangPack.exe 支持日语和简体中文需要这个支持。 SpeechSDK51MSM.exe 如果要将引擎作为产品的一部分发布需要这个。 Sp5TTintXP.exe XP下Mike和…

IE8下面的line-height的bug

当line-height小于正常值时,超出的部分将被剪裁掉转载于:https://www.cnblogs.com/jsingleegg/p/js_ie8.html

Hadoop集群的基本操作(一:HDFS操作及MapReduce程序练习)

实验 目的 要求 目的: 理解HDFS在Hadoop体系结构中的角色;熟练使用HDFS操作常用的Shell命令;了解Hadoop集群MapReduce程序的简单使用;(上传WordCount的jar执行程序;使用WordCount进行MapReduce计算&#x…

iOS实现动态区域裁剪图片

阅读 249收藏 322017-11-29原文链接:github.com想自己动手搭建一个 Discuz 论坛?试试腾讯云上实验室吧https://cloud.tencent.com/developer/labs 裁剪图片功能在很多上传图片的场景里都需要用到,一方面应用服务器可能对图片的尺寸大小有限制…

每天CookBook之JavaScript-062

鼠标进入事件鼠标离开事件<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>062</title> </head> <body> <div><img src"001" alt"001"><img src…

spring + Quartz定时任务配置

<bean id"exportBatchFileTask" class"com.ydcn.pts.task.ExportBatchFileTask"></bean><bean id"readBatchFileTask" class"com.ydcn.pts.task.ReadBatchFileResultTask"></bean><!-- 生成开卡档&#xf…

Hadoop集群的基本操作(二:HBase的基本操作)

实验 目的 要求 目的&#xff1a; 1、HBase的基本应用 要求&#xff1a; 完成HBase的高可用完全分布模式的安装&#xff1b;HBase的相关服务进程能够正常的启动&#xff1b;HBase控制台能够正常使用&#xff1b;表创建、数据查询等数据库操作能够正常进行&#xff1b; …

Abaqus用户子程序umat的学习

Abaqus用户子程序umat的学习 说明&#xff1a;在文件中&#xff0c;&#xff01;后面的内容为注释内容。本文为学习心得&#xff0c;很多注释是自己摸索得到。如有不正确的地方&#xff0c;敬请指正。 ! —————————————————————————— ! 1、为何需要…

PHP:isset()-检测变量是否被设置

isset()-检测变量是否被设置 bool isset(mixed $var [, mixed $...])&#xff0c;检查变量是否被设置&#xff0c;并且不是NULL。var,要检测的变量&#xff0c;...其他变量&#xff0c;允许有多个变量。 返回值&#xff1a;如果var存在并且不是NULL&#xff0c;则返回TRUE&…

Android通过ShareSDK实现新浪微博分享

ShareSDK社会化分享的官方说明&#xff1a;是中国最大的APP内分享服务提供商&#xff0c;ShareSDK社会化分享&#xff0c;全面支持微信&#xff0c;微博&#xff0c;QQ空间&#xff0c;来往&#xff0c;易信&#xff0c;Facebook等国内外40个平台。 ShareSDK官方网站&#xff…

Hadoop集群的基本操作(三:HBase的基本操作)

实验 目的 要求 目的&#xff1a; MySQL数据库的基本命令&#xff1b;MySQL数据库中使用SQL语句&#xff1b;MySQL数据库中数据库&#xff0c;表&#xff0c;数据的操作&#xff1b;要求&#xff1a; 完成MySQL的集群版的安装&#xff1b;MySQL集群的相关服务进程能够正常启…

iOS通过Plist保存离线调试日志

最近需要测试APP在iPhone没连接USB情况下定位时间间隔的情况&#xff0c;固把nslog的日志信息保存成本地Plist文件&#xff0c;以便测试结束后查阅运行时的日志。 一、新建一个保存日志的方法&#xff0c;参数为每次定位成功的时间&#xff08;作为key&#xff09;&#xff0c…

关于变量名前面加m的问题

为什么很多人写代码会在变量名前面加一个小写的m&#xff1f; 上大学那会儿就对这个问题感到很好奇。于是网上到处搜&#xff0c;有人说是member的意思。于是后来一直就这么认为。 最近在读Android源码&#xff0c;发现很多系统变量命名时都加了m&#xff0c;而有的变量又没有加…

谷歌推出情境感知API

在 Google I/O 2016 大会上&#xff0c;我们宣布推出新的 Google Awareness API&#xff0c;让您的应用可以利用快照和围栏智能应对用户情境&#xff0c;并且仅需占用极少量的系统资源。 所有开发者均可以通过 Google Play 服务获取 Google Awareness API。 利用 7 种不同类型的…

Hadoop集群的基本操作(四:Hive的基本操作)

实验 目的 要求 目的&#xff1a; &#xff08;1&#xff09;掌握数据仓库工具Hive的使用&#xff1b; 要求&#xff1a; 掌握数据仓库Hive的使用&#xff1b;能够正常操作数据库、表、数据&#xff1b; 实 验 环 境 五台独立PC式虚…

【转】通过Hibernate将数据 存入oracle数据库例子

一、 Hibernate介绍 Hibernate是基于对象/关系映射&#xff08;ORM&#xff0c;Object/Relational Mapping&#xff09;的一个解决方案。ORM方案的思想是将对象模型表示的对象映射到关系型数据库中&#xff0c;或者反之。Hibernate目前是ORM思想在Java中最成功、最强大的实现。…

自动布局按钮排列平均分布

需要实现如下图所示的主页面布局&#xff0c;需要两排按钮&#xff0c;每一排都自动平均分布&#xff0c;Android的话直接用LinearLayout水平布局&#xff0c;并设置layout_weight即可&#xff0c;对于iOS&#xff0c;网上有使用代码实现&#xff0c;感觉略麻烦&#xff0c;我直…

maven3 手动安装本地jar到仓库

安装命令&#xff1a; mvn install:install-file -Dfile{Path/to/your/ojdbc.jar} -DgroupIdcom.oracle -DartifactIdojdbc6 -Dversion11.2.0 -Dpackagingjar我自己安装oracle14.jar 时命令如下&#xff1a;mvn install:install-file -DgroupIdcom.oracle -DartifactIdojdbc14 …