java项⽬功能设计⽂档_Java互联⽹架构-什么样的程序员可以
成为架构师
欢迎关注头条号:java⼩马哥
周⼀⾄周⽇早九点半!下午三点半!精品技术⽂章准时送上
精品学习资料获取通道,参见⽂末
互联⽹公司的架构设计要怎么落地?
你做架构设计了吗?你认为要不要做架构设计?你的公司有没有做架构设计?互联⽹公司的架构设计⼜要怎么做?我不知道你是怎么想的,在我得到的答复中,⼤部分⼈认为要做架构设计,但⾃⼰却很少做,⾃⼰经历的公司也少有做架构设计。这⾥是⽭盾的,难道⼤部分⼈和公司都犯错了吗?应该不是这样。专职的架构师越来越少,架构部门也⼤都解散,为什么会是这样,我们该怎么办?
⼀、初识架构设计
软件⼯程⼀般可分为需求、设计、编码、测试、部署、维护。既然架构设计是⼀个过程,那么就有输⼊和输出。架构设计输⼊的是PRD产品说明书,输出的是架构设计⽂档,中间是处理过程和⼯具,具体如下:
输⼊:功能需求和⾮功能需求,从PRD中提取;
过程和⼯具:
设计的⽬标和思路
功能设计:⽤例视图、⽤例活动图
应⽤:边界、逻辑架构、接⼝、领域图
数据存储
物理架构、安装部署
⾮功能设计
输出:设计说明书,表述⼯具有Word、Visio、UML等
需求是我要什么即What,⽽架构设计是我要怎么做即How。架构设计为施⼯阶段提供了指导,有利于接下来的编码、测试、部署和维护,包括项⽬排期、⼈员分⼯、配合、单元测试、物理部署、系统修改和升级。设计是施⼯的计划,没有计划就没有管理,计划可节约施⼯的成本和时间。如果没有架构设计就开始写代码,会导致很多的问题,⼲着⼲着就⼲不下去了,或⼲到⼀半必须得改等等现象。
⼆、应⽤架构设计案例
以下是⼀个真实的应⽤架构设计案例,《国内航班查询引擎项⽬》的架构设计过程如下:
2.1 功能清单
产品经理提供的PRD⽂档做得怎么样,第⼀眼就看它有没有功能清单。下图的功能清单表格主要有两个核⼼功能,⼀个是查询航班数据模块,另⼀个是清理缓存模块。
2.2 ⽤例图与⽤例活动图
上图是⽤例图和⽤例活动图,⽤例图有查询航班数据和清理缓存,这与功能清单有对应关系。每⼀个⽤例都可以展开为⽤例活动图,产品经理的活动图关注的是业务的逻辑,我们的⽤例活动图关注是程序的业务逻辑,有更多的技术视⾓。如图所⽰,前台⽹站或Mobile发起查询请求后,经过参数验证,然后分别获取政策、获取贴点、获取价格、获取航班数据,再合并计算数据,最后构建返回数据。
2.3 领域图
上图是领域图,它从⽤例活动图演化⽽来,图中的⾏为与活动图有对应关系。如图所⽰,平台或Mobile触发查询引擎后,然后多线程获取政策数据、贴点数据、价格数据和航班数据,然后进⾏合并计算。领域图是应⽤程序的业务逻辑模型,它的每⼀个框有可能是⼀个类,也可能是⼀个类库,或是⼀个应⽤、⼀个⼦系统,它是可⼤可⼩、可伸缩、可扩展的。
2.4 接⼝设计
什么是接⼝?接⼝是契约、连接和交互,它是应⽤与外部世界的联系者。有⼀位资深架构师说过,“我只需要设计好⼀套接⼝,让整个业务流转起来,我的⼯作就做完了,⾄于怎么实现我可以不知道”,这话有⼀定道理。以上契约遵循统⼀的Request/Response实现模式设计规范。
2.5 分层设计
2.6 代码实现
左上图是第⼀个版本的代码实现,例如SearchVerify实现验证查询参数、CaculateBusiness实现合并计算、PolicyBusiness实现政策相关逻辑、PriceBusiness实现价格相关逻辑、DiscountBusiness实现贴点相关逻辑、CacheBusiness实现缓存逻辑、UserBusiness实现⽤户逻辑。右上图是第⼆个版本,相
对第⼀个版本的实现要复杂些:ValidateBusiness对应验证查询参数、CaculateBusiness对应合并计算、PolicyBusiness对应政策、PriceBusiness对应价格、TiedianBusiness对应贴点、FilterPolicy对应政策过滤。可能你已经发现,不管代码怎么升级改造,只要领域模型没有发⽣变化,业务模块也就不会发⽣⼤的变化。
架构设计会改变编码⽅式,在架构设计阶段如果做好了领域模型,你就可以在编码施⼯阶段,先写业务逻辑层再写数据访问层。先定义好业务服务和数据接⼝定义,再根据数据定义来实现数据访问。这与表驱动的传统⽅式有所不同。先写数据层再写业务逻辑层,是先写好数据表的增删改查,然后业务逻辑层只是简单地调⽤⼀下数据层,便提供给界⾯层使⽤。它只是⼀个简单代理,完全没有发挥业务逻辑层应有的价值。
2.7 其它设计项
java开发可视化界面
除了以上设计项,还有数据库设计、物理架构设计、⾮功能性设计。数据库设计有E-R图和表设计,物理架构设计有应⽤集、应⽤部署图、域名等,⾮功能性设计有性能、可⽤性、伸缩性、扩展性、安全性等。最后是总结和表述,输出⼀份架构设计⽂档,详见下图和附档链接。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。