系统架构设计_北.海的博客-程序员宅基地

技术标签: 架构  系统设计  系统架构  

首先明确应用架构的定义,从百度百科上即可了解到何为应用架构:

应用架构(Application Architecture)是描述了IT系统功能和技术实现的内容。应用架构分为以下两个不同的层次:

  • 企业级的应用架构:企业层面的应用架构起到了统一规划、承上启下的作用,向上承接了企业战略发展方向和业务模式,向下规划和指导企业各个IT系统的定位和功能。在企业架构中,应用架构是最重要和工作量最大的部分,他包括了企业的应用架构蓝图、架构标准/原则、系统的边界和定义、系统间的关联关系等方面的内容。
  • 单个系统的应用架构:在开发或设计单一IT系统时,设计系统的主要模块和功能点,系统技术实现是从前端展示到业务处理逻辑,到后台数据是如何架构的。这方面的工作一般属于项目组,而不是企业架构的范畴,不过各个系统的架构设计需要遵循企业总体应用架构原则。

简而言之,应用架构图分为两类,一类为多系统应用架构,用来分层次说明不同系统间的业务逻辑关系、信息流、系统边界等等。一类为单系统应用架构,用来分层次说明系统主要组成模块和功能点之间的业务逻辑关系。
从应用架构图的描述方式或岗位角度而言,又分为系统功能性架构图(或叫业务架构图)和系统技术层次架构图(或叫技术架构图)。两者的差异如下:

架构图类型 适用岗位 定位
业务架构图 产品经理 ①帮助产品经理基于对企业业务系统生态有全局掌握的情况下参与制定业务决策。
②帮助产品经理梳理新增系统在企业应用生态中的定位以及和其他系统之间的关系
技术架构图 技术人员 帮助技术人员搭建良好的技术规范和编码大纲

一般而言,由于现互联网公司产品经理越来越聚焦于功能设计和业务决策,而技术人员则越来越聚焦于技术设计。所以对于产品经理而言,架构图的运用则侧重在业务架构图上,技术架构图则由技术经理负责。当然产品经理如果也有技术背景,有能力理解技术架构图则更好。
下面分别引用网上大神所做的架构图例子来说明何为业务架构图,何为技术架构图。

技术架构图

由上图可见,技术架构图的特点在于用技术语言来描述系统的七个层级。

业务架构图

业务架构图可以按多系统业务架构图和单系统业务架构图进行说明。

多系统业务架构图

 

由上图可见,业务架构图是从业务逻辑的视角出发,为产品经理整齐地展现出一个企业各类系统之间的层次和关系。在产品大神杨堃的《深度|从一个故事说起,谈谈企业应用架构的演变史》一文中,形象地为我们描述了业务架构图从无到有的过程,非常值得各位产品人学习的。下面就根据大神的经验说一下自己对业务架构图的理解。
业务架构图按照层次结构可以分为经典的三层结构:展现层、业务逻辑层和数据层,而上图作者在该基础上又分别对展现层和业务逻辑层做了细分。在上图的基础上其实还可以加上一层运维层来说明系统所需要的硬件条件。对于单个系统的架构图而言尤其重要。

一级层次 二级层次 说明
展现层 前端 面对外部客户的客户端、Web官网、公众号、小程序等
  后台 面对内部人员的后台系统
业务逻辑层 业务单元支持系统 主要指可以在同一企业的不同子系统中复用的支持同类业务的单元系统
  职能单元支持系统 主要指企业职能部门使用到的OA、邮箱等系统。一般中小企业这块都是相对比较独立的。比较难嵌合进其他业务系统体系中。
  基础架构支持系统 基础业务逻辑,包括账号体系、鉴权授权体系、定位、短信、支付等等
数据层 数据仓库 负责打通各系统之后的全部数据存储和处理
运维层 运维层 主要指企业各系统的硬件环境

使用多系统应用架构图还有一个好处在于,每当有新增的子系统时,可以提前预判是否需要共用哪些单元或者业务逻辑。例如是否用同一套账户体系,这对产品前期开发至关重要。

单系统业务架构图

对于一个从0到1的项目而言,产品经理除了要了解这个项目在整个企业应用架构中的定位,还要对整个系统的模块和功能有着清晰的分层次设计和了解。所以产品经理就不仅需要多系统业务架构图,也需要单系统业务架构图。

 

单系统应用架构图

 

由上图可以看出,单系统应用架构图分层可以和多系统应用架构图一致。但是每个层次里面的说明单元就变成功能模块,而非子系统。

应用架构图看起来和具体功能设计没太大关系,但心中存在这一张图时,可以从整个大局去设计系统,做好提前布局,避免后期出现巨坑。



作者:SanCode
链接:https://www.jianshu.com/p/9389301b0bc8
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Norsaa/article/details/84633418

智能推荐

Android Apk反编译 dex2j遇到如下问题 com.googlecode.d2j.DexException: not support version.-程序员宅基地

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

记一次导入4G大小的SQL文件到MySQL数据库_sql 4g文件-程序员宅基地

Win10操作系统 MySQL版本一个为8.0另一个为5.7通过命令行直接进入MySQL8.0会报错:可能是因为系统分辨不出要进入哪一个MySQL(警告为在命令行里直接输入MySQL密码不安全,使用mysql -uroot -p敲回车再输入密码更安全。)正确打开的方法为进入安装MySQL文件夹下的bin目录,再敲上述代码:先cd一下MySQL8.0的安装目录再使用进入MySQL的命令,最好加上端口号(此处MySQL57版本的端口号是13306,而MySQL8版本的端口是3306):检查数_sql 4g文件

html5 拖拽上传文件时,屏蔽浏览器默认打开文件-程序员宅基地

  我们在使用html5的拖拽上传时,做法往往是监听一个控件范围内的drop事件。但是用户在操作的时候往往会出现文件没有进入到控件范围内就释放的情况,这种情况在以下浏览器中会出现不同的情况,下面是实验结果:    chrome: 如果该文件是浏览器可浏览文件(图片等),浏览器会在当前窗口打开文件的预览;如果是不可浏览文件,则会触发浏览器的下载    fireFox:如果该文件是..._拖拽上传为什么要阻止默认事件

在jsp页面使用富文本编辑器_jsp页面文本编辑器-程序员宅基地

#在jsp页面使用富文本编辑器工具:MyEclipse(1)下载ueditor下载地址:http://ueditor.baidu.com/website/download.html(2)解压缩文件,并把文件夹名改为ueditorueditor\jsp\lib路径下有commons-codec-1.9.jar、commons-fileupload-1.3.1.jar、commons-i..._jsp页面文本编辑器

密码学专题 非对称加密算法指令概述 DSA算法指令_dsa加密算法-程序员宅基地

DSA算法和DSA指令概述DSA算法是美国国家标准的数字签名算法,只具备数字签名的功能不具备密钥交换的功能 生成DSA参数然后生成DSA密钥,DSA参数决定了DSA密钥的长度 三个指令 首先是dsaparam指令,该指令主要用来生成DSA密钥参数,并提供了一些格式转换、C代码生成等其他类似于dhparam指令的功能。一组DSA参数可以用来生成多个不同的DSA密钥,而不是仅仅对应于一个DSA密钥。 gendsa指令用来从现有的DSA参数中生成DSA密钥,使用相同的DSA参数可以生成不同的DSA密钥_dsa加密算法

unity动态加载Resources并且实例化_unity resouce.load 后需要实例化吗-程序员宅基地

直接附上代码,在resources文件家中存在预制物体就可以GameObject Prefab = (GameObject)Resources.Load("Prefabs/task1"); Prefab = Instantiate(Prefab); Prefab.transform.parent = parent; Prefab.transform.position = Vector3.zero; Prefab.transform.localScale = Vector3.one;将预制物体放在需要位置,_unity resouce.load 后需要实例化吗

随便推点

TCP server Socket编程 VC++6.0-程序员宅基地

研二 wifi嗅探项目 第一阶段 数据提取与分析#include #include #pragma comment(lib,"ws2_32.lib") int main(int argc, char* argv[]) { //一、WSAStartup函数初始化Winsock WORD sockVersion = MAKE

修改Jtable字体颜色-程序员宅基地

今天写一篇关于JTable有关的文章,包括:为JTable单元格设置字体颜色、为JTable单元格设置背景色、让JTable某一列设置为不可能编辑。代码很简单,请朋友们参考如下: package Java; import javax.swing.JFrame; import javax.swing.JTable; import javax.swi

video2frames - 把视频切割成一帧帧的图片-程序员宅基地

def video2frames(video_path, newdir): cap = cv2.VideoCapture(video) count = 0 while (cap.isOpened()): ret, frame = cap.read() if True: if ret == True: # cv2.imshow('video2frames', frame) ...

关于linux内核中结构体初始化的新写法-程序员宅基地

查看linux源代码,经常会被其中一些程序的写法所迷惑,此种初始化写法并不是什么特殊的代码风格,而是所谓的C语言标记化结构初始化语法(designated initializer),而且还是一个ISO标准,C99注意:适用于GCC编译器,GCC能完美支持C99,VC2005支持C89,还不支持C99,只有能完美支持C99的编译器才能编译通过。GCC有扩展标记化结构初始化语法,写法是

基于 Binder 的跨进程通信以及 Service(二):Java 层_java binder和wrapper对外部提供service接口-程序员宅基地

同进程使用Service(一)比如,你做了一个音乐播放 app,里面有一个 MusicService 负责后台播放音乐,对外提供 play(),pause() 的接口你在一个 Activity 里想调用这个 Service 的 play(),怎么搞?必须在这个 Activity 里拿到刚才启动的 MusicService 的实例,但这是不可能的。Service 实例是由安卓OS维护的,你拿不到_java binder和wrapper对外部提供service接口

HashMap、ConcurrentHashMap(1.7和1.8的不同实现)、HashTable的区别_hashtable 同步1.7 1.8-程序员宅基地

谈谈ConcurrentHashMap1.7和1.8的不同实现 HashMap vs ConcurrentHashMap引入ConcurrentHashMap是为了在同步集合HashTable之间有更好的选择,HashTable与HashMap、ConcurrentHashMap主要的区别在于HashMap不是同步的、线程不安全的和不适合应用于多线程并发环境下,而Co..._hashtable 同步1.7 1.8