「4+1视图」学习与理解

声明:部分内容摘录了简书「橘色对白」作者的文章片段。

之前经常看到文章中提到「4+1视图」,对其也有片面的理解,但一直没有实践过,不清楚其真正的作用,这两天在业务需求分析中运用了其中的一部分,想谈谈自己的粗浅理解。

最近在调研「多租户」实现方案时,看到简友「橘色对白」的3篇关于多租户架构的文章,其中一篇「以CRM系统为例,浅析初级SaaS架构的构建方法」,以「4+1视图」的形式,覆盖了分析、设计、开发、部署等阶段,如何一步一步递进,形成最终的实施方案。

所谓「4+1视图」,是从5个不同视角来描述软件体系结构,包括场景视图、逻辑视图、开发视图、过程视图、物理视图,每个视图只关系系统的一个侧面,5个视图结合起来,才能反映系统的全部内容。

好吧,语气还是有点官方了,本来想根据自己项目再分析一遍,有人又在催我睡觉了,同时觉得「橘色对白」的这篇文章写的很不错了,决定整理下分享出来。

在分享之前,说说我的实践,通过场景视图、逻辑视图,分析出了「多租户」改造时,需要的功能列表。场景视图站在使用系统的角度,分析各个角色的用例。 逻辑视图站在业务对象的角度,表达了业务对象和对象间的关系。两个视图相互递进和补充,帮助我更完整的梳理出系统的功能点。

下面分享下「橘色对白」的这篇文章,如何一步步构建CRM系统

一、场景视图

负责从用户角度,识别业务需求,描述业务场景,是架构设计的起点和终点。

场景描述

老板角度:了解客户增减数量;了解客户增减变化趋势;商务行程管理。

员工角度:保存和随时查阅客户资料;通过邮件、IM、IP电话与客户保持及时沟通;商务行程管理。

场景抽象

客户管理:增、删、改、查,客户资料;
行程管理:商务形成安排(客户拜访、合同谈判);
订单管理:已签订单的管理;

二、逻辑视图

从对象角度,构建对象模型,用以确立逻辑分层、模块划分、模块功能、模块间依赖关系等。其中,模块功能,既包括可见的业务功能,也包括不可见的系统功能(日志、权限、事务等)。

模块划分及功能

客户模块、行程模块、订单模块、报表模块

模块依赖关系

模块包含的业务对象
  • 客户模块 — 客户分组、客户、联系人;
  • 行程模块 — 时间、事项等;
  • 订单模块 — 时间、客户、订单等;
  • 报表模块 — ……

三、开发视图

从开发角度,描述软件在开发环境下的静态组织(程序包、应用的统一框架、引用的类库、SDK和中间件等),并规范和约束开发环境的结构。

开发环境
  • 开发语言:Java、JavaScript、Html
  • 数据库类型:MySQL 5.0
  • 应用服务器类型:Apache+JBOSS
  • 其他软件:Ant、JUnit 等
  • 相关硬件:略
技术框架

开源框架:Struts+Spring+Hibernate框架结构

分层策略

目录结构

根据分层,制定目录结构如下

  • Api: 存放service的接口定义源文件;
  • Action: 存放action的源文件和配置文件;
  • Biz: 存放各模块的业务逻辑组件和DAO组件;
  • Bundle: 存放JSP和HTML文件;
  • deploy:存放构建后待部署的jar文件;
  • biz目录下根据模块再分为dao和service目录,以及它们的实现类目录impl;

四、过程视图

从过程角度,描述系统的并发和同步设计。旨在解决进程、线程、并发、同步、通信等方面的问题;

五、物理视图

负责从部署角度,描述软硬件的映射关系,以及系统在分布/部署上的设计。旨在解决系统安装、系统部署、网络分布等问题。

至此,CRM系统已基本成型。

理论很重要,更重要的是去实践,在实践的过程中,才能够真正理解理论中每个字的精华。
我理解的还很浅,先欠个账,后续项目开发过程中,完整应用「4+1视图」后,我在做个实践总结。

原文地址:http://blog.51cto.com/13714880/2106584

时间: 2024-10-03 13:49:07

「4+1视图」学习与理解的相关文章

你还没掌握超表「视图」, 难怪觉得数据繁杂得要命!

视图是什么? 一张表格可以生成无数的视图 每张表格都由行与列构成,所有的行与所有的列构成了全部数据.用户可以对表格所有的行和列自由取舍与排列,构成一个张新的自定义的"行与列",我们把它称之为「视图」. 因此 我们可以只共享视图(部分数据) 无须共享整张表格(全部数据) 更深刻的了解视图共享功能 ■ ■ ■ ■ ■ 全部数据 所有的行与所有的列合在一起就构成了全部数据 (表格默认展示的数据) ■ ■ ■ ■ ■ 新建视图 点击「视图」右侧「三点」,新建视图 ■ ■ ■ ■ ■ 设置视图

「每日一歌」微信公众号

最近弄了一个微信公众号,叫做「每日一歌」(微信ID:Song_Daily).每天早上6点,分享一首经典歌曲.欢迎各位来关注! 音乐,广义而言,就是指任何以声音组成的艺术.英文Music一词源于古希腊语的μουσικ?(mousike),意即缪斯(muse)女神的艺术.而中文的音乐二字,许慎<说文解字>解释为“音,声也.生于心,有节于外,谓之音.”认为音乐和声音的区别,在于音乐需要透过人心去想像和创造.音乐可分为创作.演奏.聆听三个过程,在不同文化和社会,对于音乐的过程及其重要性都有不同的理解.

从特斯拉到计算机视觉之「图像语义分割」

作者:魏秀参链接:https://zhuanlan.zhihu.com/p/21824299来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 说起特斯拉,大家可能立马会想到今年5月份发生在特斯拉Model S自动驾驶上的一宗夺命车祸.初步的调查表明,在强烈的日照条件下,驾驶员和自动驾驶系统都未能注意到牵引式挂车的白色车身,因此未能及时启动刹车系统.而由于牵引式挂车正在横穿公路,且车身较高,这一特殊情况导致Model S从挂车底部通过时,其前挡风玻璃与挂车底部发生撞击

DDD「领域驱动设计」分层架构初探

前言 基于 DDD 传统分层架构实现. 项目 github地址:https://github.com/WuMortal/DDDSample 这个分层架构是工作中项目正在使用的分层架构,使用了一段时间发现受益匪浅,所以整理好我对该分层架构的一些理解分享给大家,我对于该分层架构还处于学习阶段理解有误的地方请指出.本次会以一个案例来说明各个分层的作用以及他们之间的调用关系,还有本次的重点不在于DDD,因为这个我还未能完全理解,当然避免不了中间会涉及DDD的一些概念. DDD 简单介绍 DDD 什么?为

Linux 小知识翻译 - 「编译器和解释器」

这次聊聊「编译器和解释器」. 编程语言中,有以C为代表的编译型语言和以Perl为代表的解释型语言.不管是哪种,程序都是以人类能够理解的形式记录的,这种形式计算机是无法理解的. 因此,才会有编译器和解释器. 对于编译型语言,是使用编译器将人类可读的代码转换为机器能够理解的「机器语言」文件,然后通过执行这个「机器语言」文件来实现程序的执行. 另一方面,对于解释型语言,是使用解释器将人类可读的代码逐行解释,一边解释一边执行这个程序.(这里的解释是将代码解释成机器语言,让计算机能够理解) 甚至有的语言既

一元治愈微信应用的「脸盲症」

「脸盲症」是一种经过正式确认的疾病,全名「面部辨识能力缺乏症」.古装剧里的姑娘戴上面纱少侠就认不出了?下次遇到这种情节别吐槽编剧啦,兴许这位少侠就患有脸盲症呢. 其实在很多方面,计算机软件不止一次吊打了人类,除了最基本的计算.记忆.分析等,这次轮到面部识别能力了- 有些童鞋可能已经知道,现在已经有手机平台实现在自带的相册应用中提供了人脸识别功能,可以自动分析手机里的所有照片,然后将包含同一个人的照片自动分组到一起. 但也许你不知道,这样的功能其实早就有了,而且对于应用开发者来说,甚至不需要自己深

微信小程序「官方示例代码」剖析【下】:运行机制

在上一篇<微信小程序「官方示例代码」浅析[上]>中,我们只是简单的罗列了一下代码,这一篇,让我们来玩点刺激的--就是看看IDE的代码,了解它是怎么运行的. 还好微信的开发团队在软件工程的实践还有待提高,我们才有机会可以深入了解他们的代码--真想建议他们看看Growth的第二部分,构建系统. 解压应用 首先你需要有下面的工具啦 Mac电脑 微信web开发者工具.app WebStorm / 其他编程器 或 IDE,最好可以支持重命名 首先,我们需要右键微信web开发者工具.app,然后显示包的内

「微信小程序」有哪些冲击与机会?

昨天晚上相信大家的朋友圈被「微信小程序」刷屏了,这影响力赶上了国务院出台新政策一样,足以说明微信在中国的影响力之大.然后今天公号后台一大堆人问我怎么看这件事,不少人很忧虑,仿佛自己将要失业一样.好吧,满足你们,今天我来说下我的看法. 什么是微信小程序? 起初是公众号「小道消息」曝出微信推出很早就传言的「应用号」,不过是叫「小程序」.一时间被疯传,因为很多人错过了公众号一波红利,这次再也不愿错过「微信小程序」的机会了,所以这一次超级敏感,那么我先说下什么是小程序吧. 微信官方是这么解释的: 我们提

Vue+WebSocket+ES6+Canvas 制作「你画我猜」小游戏

Vue+WebSocket+ES6+Canvas 制作「你画我猜」小游戏 转载 来源:jrainlau 链接:https://segmentfault.com/a/1190000005804860 项目地址:https://github.com/jrainlau/draw-something 下载 & 运行 git clone [email protected]:jrainlau/draw-something.git cd draw-something && npm install