下面我们从业务视点开始说起,也就是站在业务的角度去思考架构,这也是所有架构的必经之路,也是最重要的一条路,首先就是业务领域模型的建立,即对业务的总体分割,这是第一个步骤,下面我通过一个例子来进行一个解析,对于我们程序员来说,最熟悉的业务莫过于我们自己所在的软件行业,假设我们想做一款软件生命周期管理的软件(SLM,如bug管理,任务管理,风险管理系统等),首先我们需要问几个问题,在一个软件团队里面需要有哪些人(即角色),这些人分别需要用这个软件做哪些事情?首先我们来分析一下软件工程中的角色的分类。
我觉得在一个软件开发的过程中,至少应该有如下图中的几种角色(小项目的运行)。
我们就拿测试人员为例,虽然不是特别了解,但是我们要学会站在巨人的肩膀上,有人已经给我们整理好了,只要我们稍加阅读,整个软件行业的业务会就会呈现在我们面前,那就是Rup,通过对rup指导手册的阅读,我发现其实测试人员还可以往下细分。
下面我们那其中的测试员为例,看测试员需要使用这个SLM这个软件的哪些功能,我们先从测试员的一天开始说起,假设有一名测试人员叫小李,小李早上来到公司,首先打开工作的任务管理系统查看一天的任务列表,这里面提到了任务管理系统,我们可以提取其中的任务,还有这些任务应该是自动发送的,那么怎么自动发送的呢,这里我们可以提取出通知这样一个概念,然后小李下载了最新的可执行的代码块,这里有一个代码块的概念,对了,在这之前还有一个概念就是小李作为测试员,那么就应该有测试员所对应的权限,这里又可以把权限这样一个概念提取出来,然后小李开始使用工具开始了一天的测试任务,这里有一个工具的概念,由于人们对知识产权越来越重视,所以现在有好多软件都是买一份或几份然后共享给大家,所以工具的管理也是一个领域,在测试过程中,可能会使用到测试用例,以及测试代码单元,这里又有两个概念测试用例,和测试代码,而且在过程中一定会生成一些测试的日志(可能是工具自动生成),这里又能提取出测试日志的概念,对于测试出来的bug,需要提交到bug系统,这里还有一个bug的概念,最后小李在完成所有工作的时候还需要提交工作日志,这里面还有一个工作日志的概念,这里忘了说一点,还可能涉及到一些文档,所以就能够推导出一名测试员所相关的领域模型(如下图所示)。
所以我们即可推出所有角色所对应的各种领域模型,从而推出整个软件生命周期的领域模型。当然角色之间所对应的领域可能有所重叠,正是由于这种重叠,才使得软件生命周期体系是一个有机的整体,同时比如代码,日志等还可以泛华出更多的种类,我们可以把这些具有公共属性的模型看成一个整体去管理,这样也保证了整个体系的可持续性。
下一步,我们一起来探索一下业务流程,我们就先从离用户需求最近的角色说起——需求分析师,让我们思考一个问题,需求分析师都要做哪些事情呢?我们还是做这样一个假设,假设小李是一家软件公司的需求分析师,那么他拿到用户需求之后首先要对用户进行细致如微的调查,然后根据自己对用户所需的理解与剖析,对业务进行分析理解,最终能够将这些业务整合成一个系统,然后交给下一步的架构师,当然架构师分为系统架构师和数据库架构师,我们先说说系统架构师,假如你是一名系统架构师,你刚刚拿到小李的需求分析文档,你会怎么做,当然要先看需求文档了,找出问题,说的专业一点就是需求评估,说的直白一点就是哪些能做,哪些不能做,当然这个过程是有一个标准的需求评估标准,针对这个标准我这里要说几句,首先要看文档的目录结构,一般有这样几点,功能性描述,质量相关,还有结构,后面两个属于非功能性,这里面的结构主要有这样几种描述方式——函数式描述,用例式描述,故事式描述,函数式就是使用函数之间的调用关系来标识结构,用例式就是使用用例图(包括一定的用例描述,通常有使用者,前置条件,后置条件,场景等描述),故事式顾名思义,就是用故事的形式进行描述(一般用于敏捷开发srcrm,先简单说到这,以后细聊,敏捷很有意思),对需求进行评估之后,就要进行最关键的架构设计,同时还要建模并编写代码来验证自己的架构并同时提交给开发,同时也要关注开发的全过程,如果遇到问题还需要进行架构的重构,数据库架构师,首先也要对用户的需求文档进行研究,进行数据上的评估,然后进行数据库的逻辑设计,接下来要进行物理设计提高性能提交给开发,他也要对开发的过程进行关注,及时进行性能优化,针对相关的问题,在关键时刻还要进行数据库的重构,终于到了开发的手中,当然其实还有几种角色,这里面就不一一介绍了,如UI设计师,数据分析师,视觉设计师等,下面我就以一名开发人员的身份来展示一下开发工程师的工作流程,首先我拿到架构师提供的设计骨架要进行详细设计,然后进行编码,之后进行单元测试,集成工作,最后提交给测试人员进行测试,对反馈的bug进行修改,测试工程师这个角色也是必不可少的首先,测试人员从开发人员那块获得测试需求,要根据公司或者业界的质量标准来进行测试的设计,然后进行测试,像开发人员提交问题报告,最后提交给用户。整个软件的过程表面上看起来是一条道跑到黑的,但是在真是的情况下要进行迭代式的开发,就好比滚雪球,越滚越大,软件也越来越丰满,越来越稳定,风险也越来越低。根据我对上述过程的描述,有没有感觉,是不是可以将流程图画出来了?下面我们把业务流程图画出来,如下图
下面我们要对流程进行优化与再造(BPR),与业务组件化,并且构建业务全息展现图——CBM图,CBM图是用矩阵的方式来编排业务组件,这个矩阵的横向一般是业务使用者分层,纵向是业务领域主题域,不过这个是要费点时间的,通常要一到两个月的事件来将业务组件化(接下来的一段时间,我将会做一些实践工作,成果到时候我会和大家交流),最后就是业务的抽象化,这个是软件分析的最高境界了,ERP5做到了,把业务分为五个方向节点(Node)、资源(Resource)、迁移(Movement)、物品(Item)、路径(Path),不过想想确实是这样,例如bug管理模块,风险管理,这些都可以被归类为WorkItem,文档管理,代码管理等可以归类为Resource等。
最后我们说一下资产视图,也就是可重用的代码块,平台框架等部分。如代码工厂,缓存框架,UI框架等部分。
这里面还要补充一点,就是对非功能性需求的切割,非功能性需求该如何进行切割呢,非功能性需求主要有这样几点,可靠性、稳定性、性能等,我这里就不一一说明,就拿可靠性来说吧,维持一个系统可靠性,主要可以从两个方面考虑,一个是可预知,可预估的风险,另外一个就是不可预知的风险,打个比喻,在非典期间,好多人都吃板蓝根来预防自己患病,这就是对可预估的风险进行预防,再打个比喻我们去医院看病,为什么要去医院呢?这是因为我们不知道自己得了什么病,是在出现症状之后才进行的处理,下面我们想一下我们看医生的步骤,医生进行一些简单的询问后,会通知你去进行化验,然后医生针对化验结果给你开出一定的处方来治疗,系统运行也是如此,首先对于可预估的风险进行预防,如果在系统运行中遇到错误,那么首先可以对系统的运行状态进行检测——比如心跳法,然后对这些错误或者异常进行恢复,并且对有传播性的异常要进行隔离,这样我们就把软件的可靠性划分为这样几点预防,检测,修复,隔离。
相关推荐
《ASP.NET 2.0项目开发第一步——UML+C#与VB双语+Crystal Reports》是一本面向初学者和进阶者的技术书籍,旨在通过实际项目案例,介绍如何使用ASP.NET 2.0进行Web应用开发。这本书的核心知识点涵盖了UML(统一建模...
1. **乘客&司机登录鉴权**:这是业务的第一步,确保用户的合法性和安全性。 2. **订单处理**:包括分单、计价等操作。 3. **支付结算**:处理支付流程,包括收银、支付等功能。 4. **反作弊与管控**:通过技术手段...
总之,网络系统设计的第一步——用户需求调查与分析,是整个设计过程的核心。只有全面、准确地了解用户的需求,才能设计出符合实际业务需求、高效率、高性能且安全的网络系统。通过一般状况调查、性能需求调查、功能...
第一部分是关于软件测试工程师的职业规划,强调了“三年之痒”现象,即测试工程师在工作几年后可能会遇到职业发展的瓶颈。这部分分析了中国软件测试行业的现状,提出测试工程师应明确职业发展方向,并给出相应的职业...
1. 需求获取:这是需求分析的第一步,通常通过访谈、问卷调查、观察和工作坊等方式,与项目干系人进行沟通,了解他们的需求和期望。 2. 需求描述:将获取的需求转化为清晰、无歧义的文字描述,通常使用用户故事、用...
#### 架构演变的第一步:物理分离Web服务器与数据库 在网站初创阶段,通常是通过一台主机来承载所有的功能,包括Web服务和数据库服务。随着用户访问量的增长,单一主机的性能瓶颈开始显现,其中最明显的就是Web服务...
首先,需求分析是项目启动的第一步。在这个阶段,我们需要深入了解医院的业务流程,确定挂号系统的核心功能,如在线预约、实时查询医生排班、取消预约、支付挂号费用等。同时,也要考虑系统的扩展性,如支持多科室、...
联想的转型策略主要包括两步:首先,通过推出天禧电脑等产品,初步涉足互联网,这是其互联网战略的第一步。随后,通过大规模的融资活动,尤其是2000年2月29日宣布的股份配售计划,筹集资金28亿港币,为后续的互联网...
- **定义**:需求分析是软件开发的第一步,目的是明确软件系统应该做什么。 - **方法**:可以通过与用户访谈、收集业务需求等方式来进行。 - **文档**:需求规格说明书是需求分析的结果,是后续设计和开发的基础。 ...
本篇将详细探讨这个架构演变的第十个阶段——进入大型分布式应用时代和廉价服务器群梦想时代,同时会涉及到与之相关的源码分析和工具使用。 一、大型分布式应用时代的到来 1. 分布式系统的定义:分布式系统是由多...
首先,需求分析是软件开发的第一步。在设计医院挂号系统时,我们需要了解并明确医院的工作流程、患者的需求以及医生的排班情况等信息。这些需求可能包括:患者在线预约、查询医生信息、选择就诊时间、支付挂号费等...
1. **需求分析**:这是软件工程的第一步,包括了解用户需求、收集信息、定义功能和非功能需求,以及创建需求规格说明书。 2. **设计阶段**:涉及软件架构设计、模块划分、接口定义以及数据结构和算法的选择。这一...
POC(Proof of Concept,概念验证)是推广RPA的第一步,而COE(Center of Excellence,卓越中心)则是实现规模化应用的关键。 RPA供应商的商业模式基本相似,但通过技术实力、市场定位和业务策略的差异化,各自在...
本文将介绍一个具体的SOA治理框架及其最佳实践,并引入我们的六步SOA治理成功模型。 #### SOA治理的定义 SOA治理是一种管理机制,旨在确保SOA环境下的业务活动符合既定的政策、标准和最佳实践。它不仅涵盖了服务的...
1. **Log Cluster(日志集群)**:作为数据采集的第一步,Log Cluster负责从各种数据源中收集日志数据。它采用自研的方案,相较于Scribe和Flume等开源工具,具备更高的性能、扩展性和容错能力。Log Cluster的设计中...
数据导入是整个数据处理流程的第一步,涉及到各种数据源的数据收集和整合。阿里大数据平台支持多种数据源,包括结构化数据和非结构化数据。非结构化数据如文本、图片、视频等,通过实时流式同步的方式进行数据导入;...
- **步骤**:每个阶段的第一步通常是选择参考模型、视角和工具(E)。这有助于确保后续的工作基于一致的方法论和标准。 #### 目标架构实施规划的初始阶段 - **阶段**:目标架构实施规划的初始阶段是阶段E(B)。在这个...
麦肯锡强调,理解项目目标和客户期望是第一步,这通常通过与客户建立客户服务团队(CST)来实现。CST的核心任务是协助客户明确业绩改善目标,同时定义麦肯锡在实现这些目标中的作用。在项目中,麦肯锡的角色可能是...
9. 重构第一步——面向接口编程 在用户注册的例子中,首先定义一个UserRepository接口,包含保存用户、查询用户等方法。原有的用户持久化类(如JdbcUserRepository)实现这个接口,这样就可以在不修改调用者代码的...