为了成为一名架构师必须稳扎稳打,软件架构设计的模块划分

简介: 之前,我们在开发的时候总是惯性思维的以某张业务表的维度进行三层结构的功能开发,没有去思考他们功能模块间的关系,只是为了完成目标而进行开发。

前言

大家好,我是小郭,前面的一段时间学习了架构设计的基础以及架构设计的实践,今天是我们最后一个环节划分模块。

之前,我们在开发的时候总是惯性思维的以某张业务表的维度进行三层结构的功能开发,没有去思考他们功能模块间的关系,只是为了完成目标而进行开发。

接下来,主要以功能模块的划分、分层划分、用例驱动模式划分来学习划分模块。

书籍

软件架构设计-程序员向架构师转型

功能模块划分

认识什么是功能树?

说到功能树,需要先确定他的来源避免方向错误,通常情况下是根据上游的客户或者产品经理提出的,我们根据他们提供的需求文档、市场材料、方案书来确定整体要的是什么东西。

他的作用是呈现问题领域,将功能组和功能项的关系呈现出来,从而进行需求层面的分析

给我们带来什么价值呢,主要就是覆盖全部功能点,避免遗漏。

划分功能模块图

根据功能树对系统模块进行划分,通常是将涉及相同的函数、字段将这些功能映射到同一个功能模块

这一步是有架构师来实现,为客户呈现解决方案,提炼业务中的共通点,目的是为了达到高内聚,低耦合。

可以看的出来功能树和划分模块图两个是相辅相成的,利用功能树确认功能点的完善,将功能树中高度相似或者相同的元素点整合出来,划分模块。

分层划分

很多人做开发的时候,不知道为什么需要分层,只知道别人也是这么分的,我也要分。导致根本不知道每个分层之间是有什么区别,可能就出现了在Controller写一大堆业务逻辑的场面。因此,学习还是要知其然知其所以然的。

常见模式

网络异常,图片无法展示
|

上面的两个方案就是我们熟悉的MVC架构,每一层都有他的含义,在展现层我们只需要关心接口的出参入参是否合规,在业务层我们只要关心业务的流转以及异常的处理,在数据层我们只需要关心怎么去数据库查询数据。

他们的优点:

  1. 一定程度的关注点分离
  2. 规范了层间的调用关系,降低层之间的依赖

实践技巧

设计分层结构,从上下文图开始,这里在提一嘴上下文图是什么,主要就是顶层数据流图和黑盒的用例图

那从上下文图,获取需求分析,来确定外部的用户、确定数据库或文件持久化设施、确定第三方系统、确定定时任务的触发。

完成了第一步需求分析确定,再来确定我们的分层结构。

用例驱动模式划分

本质思想:从点到线最后到面

什么是点呢?我们的用例就是点。

什么是线呢?众多用例汇聚起来的,组成一个类就是我们的面。

什么是面呢?就是划分的模块。

我们从两方面入手,需求层与设计层

需求层:

  1. 用例图定义系统能提供给外部Actor的功能

网络异常,图片无法展示
|

2. 利用用例规约,进行进一步的确认

设计层: 打破黑盒,识别一个用例背后的类,以及设计类之间的关系

  1. 运用鲁棒图,发现实现用例需要用到哪些类
  2. 运用序列图,明确类之间的关系,更重要的是通过序列图来思考边界问题

通过多个实例识别出这些类,将他们划分到不同模块

  1. 运用包图
相关文章
|
7月前
|
敏捷开发 缓存 架构师
Apache 架构师总结的 30 条架构原则
Apache 架构师总结的 30 条架构原则
83 0
|
4月前
|
存储 架构师 测试技术
架构之道——人人都是架构师
本文的探讨和编写主要围绕三个方面:架构是什么?架构师要解决的问题有哪些?解决这些问题的方法论是什么?最后作者希望人人都能具备架构师思维。
|
7月前
|
机器学习/深度学习 人工智能 架构师
【架构师】AI时代架构师必备技能
【架构师】AI时代架构师必备技能
153 5
|
2月前
|
缓存 NoSQL Java
秒杀圣经:10Wqps秒杀,16大架构绝招,一文帮你秒变架构师 (2)
高并发下的秒杀系统设计是一个复杂的挑战,涉及多个关键技术点。40岁老架构师尼恩在其读者交流群中分享了16个关键架构要点,帮助解决高并发下的秒杀问题,如每秒上万次下单请求的处理、超卖问题的解决等。这些要点包括业务架构设计、流量控制、异步处理、缓存策略、限流熔断、分布式锁、消息队列、数据一致性、存储架构等多个方面。尼恩还提供了详细的实战案例和代码示例,帮助读者全面理解和掌握秒杀系统的架构设计。此外,他还分享了《尼恩Java面试宝典》等资源,帮助读者在面试中脱颖而出。如果你对高并发秒杀系统感兴趣,可以关注尼恩的技术自由圈,获取更多详细资料。
秒杀圣经:10Wqps秒杀,16大架构绝招,一文帮你秒变架构师 (2)
|
2月前
|
缓存 NoSQL Java
秒杀圣经:10Wqps高并发秒杀,16大架构杀招,帮你秒变架构师 (1)
高并发下,如何设计秒杀系统?这是一个高频面试题。40岁老架构师尼恩的读者交流群中,近期有小伙伴在面试Shopee时遇到了这个问题,未能很好地回答,导致面试失败。为此,尼恩进行了系统化、体系化的梳理,帮助大家提升“技术肌肉”,让面试官刮目相看。秒杀系统设计涉及16个架构要点,涵盖业务架构、流量架构、异步架构、分层架构、缓存架构、库存扣减、MQ异步处理、限流、熔断、降级、存储架构等多个方面。掌握这些要点,可以有效应对高并发场景下的秒杀系统设计挑战。
秒杀圣经:10Wqps高并发秒杀,16大架构杀招,帮你秒变架构师 (1)
|
3月前
|
编解码 Linux 开发工具
Linux平台x86_64|aarch64架构RTMP推送|轻量级RTSP服务模块集成说明
支持x64_64架构、aarch64架构(需要glibc-2.21及以上版本的Linux系统, 需要libX11.so.6, 需要GLib–2.0, 需安装 libstdc++.so.6.0.21、GLIBCXX_3.4.21、 CXXABI_1.3.9)。
|
5月前
|
人工智能 供应链 架构师
软件架构一致性问题之Serverless架构处理架构一致性问题如何解决
软件架构一致性问题之Serverless架构处理架构一致性问题如何解决
60 2
|
5月前
|
存储 架构师 测试技术
架构之道:人人都是架构师(2)
每个业务系统的开发者都应该具备一定的架构师素养,架构师的重要职责不仅仅是做决策,更重要的是提升团队的整体能力。一个好的架构师应该聚焦于业务和系统,定义问题和结果,设计系统、模块和代码,同时也需要解决跨域问题,确定团队间的边界,制定规范,统一语言,并创建一个让每个人都能成长为架构师的环境,以促进团队的敏捷性。本文旨在探讨如何培养架构思维,并阐述了架构师的职责、能力模型、方法论,以及如何成为架构师。
154 10
|
5月前
|
存储 运维 架构师
架构之道:人人都是架构师(1)
架构之道:人人都是架构师
213 8
|
6月前
|
前端开发 JavaScript 架构师
Webpack模块联邦:微前端架构的新选择
Webpack的模块联邦是Webpack 5引入的革命性特性,革新了微前端架构。它允许独立的Web应用在运行时动态共享代码,无需传统打包过程。基本概念包括容器应用(负责加载协调)和远程应用(独立应用,可暴露模块)。实现步骤涉及容器和远程应用的`ModuleFederationPlugin`配置,以及在应用间导入和使用远程模块。模块联邦的优势在于独立开发、按需加载、版本管理和易于维护。通过实战案例展示了如何构建微前端应用,包括创建容器和远程应用,以及消费远程组件。高级用法涉及动态加载、路由集成、状态管理和错误处理。
116 3