Java 6-1 项目模块化-概念

2023-11-20

6-1 项目模块化-概念

一、组件化与模块化

组件化

以功能为依据,解决复用问题

  • 初衷:
    复用的代码,进行工具性的封装

  • 目的:
    复用,解耦

  • 依赖:
    各组件之间独立,低依赖甚至零依赖

  • 架构(纵向):
    位于项目底层,被其他上层依赖

  • 举例:
    Dialog、自定义控件、网络请求、图片加载、工具集、三方库

模块化

以业务为依据,解决复用问题

  • 初衷:
    业务划分,把同一类型业务逻辑进行需求性的封装

  • 目的:
    隔离,高内聚

  • 依赖:
    模块之间无依赖关系,但可以自由组合

  • 架构(横向):
    位于业务层,平级依赖

  • 举例:
    用户模块、订单模块、汽车模块、认证模块


二、模块化思想

核心:每个模块作为一个独立的子项目,子项目之间不要有相互依赖(基础模块除外)

  1. 多人同步开发的情况下互不影响
  2. 模块单独维护、升级、调试、测试、打包部署等,实现轻量化
  3. 约定不轻易修改主程序、基础模块、对内接口等
  4. 模块之间实现 高效组合、拆分

三、模块化的优缺点

优点

可维护性高

  • 架构清晰,开发灵活
  • 降低业务耦合度
  • 方便单模块的 调试、升级、维护,调试效率也更高
  • 模块间的高效组合和拆分

缺点

性能损耗大

  • 调用链长,排查代码费力
  • 模块间通信很消耗性能
  • 不要为了模块化而复杂化本来不需要过大架构的项目

四、模块化场景

业务增量包

  • 汽车模块为基础模块,可单独打包发布
  • APP汽车模块、订单模块、财务模块等,都需要依赖汽车模块
  • 任意组合:A+B+C+D、A+B、A+C、B+C

项目部署

  • 更好应对项目 容灾、业务重组、服务器负载 等各方面考研
  • 用户、汽车、交易者、订单、财务,都是独立的系统,部署到不同服务器
  • 微服务,是模块化的一种实现方式
  • SaaS系统,软件即服务/软件服务化,需要用到模块化

五、模块化项目架构设计

  • 综合业务层
  • 拓展业务层
  • 基础业务层
  • 公共库
  • 实体库
  • 基础库

模块化项目架构设计图

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java 6-1 项目模块化-概念 的相关文章

  • JAVA_HOME环境变量和Java JDK趣事

    我想让 Java 在 1 6xxx 上运行 我更改了 JAVA HOME 变量并将其指向目录 C Program Files Java jdk1 6 0 16 我重新启动 PC 我想我可以检查我的机器指向哪个版本的 Java 但它仍然指向旧
  • 将倒计时器从 10 秒改为 1 秒

    我有一个倒计时器 它以 1 秒的增量从 10000 毫秒倒计时到 0 毫秒 以使按钮在 10 秒后可单击 尽管计时器是准确的并且按照代码的说明执行操作 但我想更改秒的表示方式 但我不知道如何更改 java void startTimer c
  • JTree 避免重新加载后崩溃

    我正在尝试找到解决崩溃问题的方法JTree重新加载后 情况 JTree Office A Office A 1 Office A 1 1 Office A 1 2 Office B Office B 1 Office B 1 1 Offic
  • java.time.LocalDate 到 java.util.Date

    转换的最佳方式是什么java time LocalDate to java util Date Date from dateToReturn atStartOfDay ZoneId systemDefault toInstant 我一直在尝
  • LibGDX 闪烁

    我已经使用 LibGDX UI 设置来启动一个项目 我在实现 ApplicationListener 中唯一拥有的是 public void create setScreen new LoadingScreen this 这应该会触发 Lo
  • [TYPE] 类型的 Bean 'x' 不符合所有 BeanPostProcessors 的处理条件

    我有一个ResourceAspect class Component Aspect public class ResourceAspect Before execution public public void resourceAccess
  • 枚举内的枚举

    这不是我被卡住的问题 而是我正在寻找一种简洁的方式来编写我的代码 本质上 我正在编写一个事件驱动的应用程序 用户触发事件 事件被发送到适当的对象 然后对象处理事件 现在我正在编写偶数处理程序方法 我希望使用 switch 语句来确定如何处理
  • 最终类中的静态函数是否隐式最终?

    我的问题基本上与this https stackoverflow com q 8766476 3882565一 但这是否也适用于static功能 我想了解 编译器是否处理所有static函数在一个final类为final 是否添加final
  • 在仔细锁定但不受信任的代码上使用 Thread.stop()

    我知道Thread stop 已被弃用 并且有充分的理由 它通常不安全 但这并不意味着它是never安全 据我所知 在我想要使用它的上下文中它是安全的 而且 据我所知 我别无选择 上下文是一个两人策略游戏的第三方插件 以国际象棋为例 第三方
  • 如何使 JFileChooser 仅显示具有某些特定名称 Java 的文件夹

    有什么方法可以让 JFileChooser 加载时仅显示名称为 Hello 的文件夹 这是我的代码 它显示所有文件夹以及扩展名为 py 和 java 的文件 我想添加文件夹名称限制 FileNameExtensionFilter filte
  • 如何解决声纳中的 dodgy:unchecked/unconfirmedcast 问题?

    我在下面的代码中通过声纳获得异常 我该如何解决这个问题 建议我 Override public boolean validate BaseInfo infoObject boolean isValid true AckTransferPay
  • 如何将 .txt 文件的最后 5 行读入 java

    我有一个包含多个条目的文本文件 例如 hello there my name is JoeBloggs 我如何按降序阅读最后五个条目 即来自 JoeBloggs 那里 我目前有代码只能读取最后一行 public class TestLast
  • 当 javadoc 未附加到依赖项时,如何将 javadoc 引用到 Maven 的 eclipse 插件中的依赖项

    我在开发中使用 Eclipse Maven 和 Java 我使用 Maven 下载依赖项 jar 文件和 javadoc 如果可用 并使用 Maven 的 eclipse 插件为 Eclipse 生成 project 和 classpath
  • FocusEvent 没有获取 JFormattedTextField 的最后一个值,我如何获取它?

    我有两个JFormattedTextField我的物体JFrame目的 我想要通过这些值进行基本数学 加法 JFormattedTextField对象 我希望当焦点丢失第一个或第二个文本字段时发生这种情况 但当 focusLost 事件没有
  • 如何在 VSCode 中热重载 Tomcat 服务器

    我正在从 Eclipse IDE VSCode 分别用于编码 Java servlet 和 HTML CSS JS 网页 迁移到仅使用 Visual Studio Code 因为它的轻量级 我为 VSCode 安装了几个 Java 扩展 R
  • 如何为用户的活动设置计时器?

    如果用户在 5 小时内停止工作 我需要执行特定的方法 假设用户已登录 但他在 5 小时内没有向数据库的特定表添加任何记录 任何时候用户将记录添加到指定的表中 该特定用户的计时器都应该重置 否则它将继续运行 如果达到 5 小时 应用程序应显示
  • 带有客户端认证连接的 HTTP 客户端的 SOAP 请求超时异常

    我正在尝试点击具有客户端认证的网址并生成密钥 keytool genkey alias server keyalg RSA keystore example jks validity 10950 和密钥存储 keytool import t
  • 将Json字符串映射到java中的map或hashmap字段

    假设我从服务器返回了以下 JSON 字符串 response imageInstances one id 1 url ONE two id 2 url TWO 杰克逊代码大厦 JsonProperty 我怎样才能得到HashMap对象出来了
  • 无法取消 GWT 中的重复计时器

    我正在尝试在 GWT 中安排一个重复计时器 它将每一毫秒运行一次 轮询某个事件 如果发现满意 则执行某些操作并取消计时器 我尝试这样做 final Timer t new Timer public void run if condition
  • eclipse.ui.menus 的名称过滤器

    我有一个菜单贡献 通过实现org eclipse ui menus扩展点 我想仅为特定文件扩展名 例如 pld 提供此菜单贡献 但我不知道如何使用 visibleWhen 来做到这一点 有任何想法吗 更新 到目前为止我的扩展点

随机推荐

  • 讲解+可执行完整代码 C++单链表(2)查找、插入、删除元素

    目录 一 查找元素 代码部分 核心代码 完整代码 二 插入元素 核心思路 代码部分 核心代码 完整代码 编辑 三 删除元素 核心思路 代码部分 核心代码 完整代码 一 查找元素 此段代码仅实现查找元素的功能 代码部分 核心代码 node l
  • 探究 Nginx 中 reload 流程的真相

    点击上方 程序员小乐 关注 星标或置顶一起成长 每天凌晨00点00分 第一时间与你相约 每日英文 Try to hold the right hand with your left hand and gave yourself most s
  • web前端技术笔记(二)html 表单 和页面嵌套

    1 相对路径和绝对路径 2 有序和无序列表 3 表格 4 注册表单 表单用于搜集不同类型的用户输入 表单由不同类型的标签组成 相关标签及属性用法如下 1
  • 基于 Zipkin的链路追踪

    Zipkin介绍 Zipkin 是 Twitter 的一个开源项目 它基于 Google Dapper 实现 它致力于收集服务的定时数据 以 解决微服务架构中的延迟问题 包括数据的收集 存储 查找和展现 我们可以使用它来收集各个服务器 上请
  • 每日一练-仓库日志

    仓库日志 题目描述 解题思路 Python源码 Summary Date 2023年1月9日 Author 小 y 同 学 Classify 蓝桥杯每日一练 Language Python 题目描述 题意 M海运公司最近要对旗下仓库的货物进
  • ST公司 Lis2dh12 三轴加速度传感器,计算加速度值转成角度值

    目录 概述 项目上使用了一款Lis2dh12三轴加速度传感器 开发前要准备的工作 1 原理图 1 1 创建lis2dh12 c文件 1 2 在此重点说明 如果想调传感器的中断灵敏度 注意 关注1 INT1 THS 32h 2 INT1 DU
  • 华为OD机试真题- 任务混部【2023Q1】【JAVA、Python、C++】

    题目描述 公司创新实验室正在研究如何最小化资源成本 最大化资源利用率 请你设计算法帮他们解决一个任务混部问题 有taskNum项任务 每个任务有开始时间 startTime 结束时间 endTime 并行度 parallelism 三个属性
  • 什么是分布式架构

    一 分布式架构定义 什么是分布式架构 分布式系统 distributed system 是建立在网络之上的软件系统 内聚性 是指每一个数据库分布节点高度自治 有本地的数据库管理系统 透明性 是指每一个数据库分布节点对用户的应用来说都是透明的
  • 多处理器编程的艺术(二)-并行程序设计

    当处理器的性能的发展受到各方面因素的限制的时候 计算机产业开始用多处理器结构实现并行计算来提高计算的效率 我们使用多处理器共享存储器的方式实现了多处理器编程 也就是多核编程 当然在这样的系统结构下我们面临着各种各样的挑战 例如如何协调各个处
  • 十四、java版 SpringCloud分布式微服务云架构之Java String 类

    Java String 类 字符串广泛应用 在 Java 编程中 在 Java 中字符串属于对象 Java 提供了 String 类来创建和操作字符串 创建字符串 创建字符串最简单的方式如下 String str xxx 在代码中遇到字符串
  • STM32串口中断、DMA接收的几点注意地方

    STM32串口中断 DMA接收的几点注意地方 https tieba baidu com p 5978431198 red tag 1717231177 traceid 这个文章棒 今天写点大家常问 也是常见的关于UART串口的内容 这几点
  • Ubuntu 18.04安装教程(转)

    https blog csdn net qq 39478237 article details 83084515 参考这个播客安装
  • LAB1实验

    Part 1 遇到问题1 我将JOS放在Windows的目录下 通过VMware设置共享该文件夹来编译JOS 但是Windows更改linux下设置的权限 导致GDB无法调试QEMU 解决方法 将JOS放在虚拟机下的linux的目录下 20
  • Activiti6.0学习实践(5)-activiti流程引擎配置二

    本节继续对activiti流程引擎的配置进行学习 1 EventLog配置 1 1 配置EventLog 首先在activiti eventlog cfg xml中配置eventlog属性为true 1 1 1测试代码 编写一个eventl
  • 推荐111个软件工程本科的计算机毕业设计,有手就会

    对于即将挑战计算机专业毕业设计的学子们 是否已经为选题和项目感到焦虑 今天 我们为即将毕业的学生提供了大量的毕业设计项目 期望对于正在为毕业设计挠头的同学们有所助益 一 成品列表 以下所有springboot框架项目的源码博主已经打包好上传
  • Redis介绍、安装、基础命令

    目录 引言 一 关系数据库和非关系数据库 1 1 关系型数据库 1 2 非关系型数据库 1 3 关系型数据库与非关系型数据库区别 数据存储方式不同 扩展方式不同 对事务性的支持不同 非关系型数据库产生背景 二 Redis简介 2 1 Red
  • 网站打开速度缓慢的原因都有哪些?

    在进行站点优化时 很多站长会发现我们的网站有时运行速度很快 有时运行速度很慢 严重影响了用户体验 因此 有必要理解为什么网站变得很慢 如今 可以帮助你了解为什么我们的网站会慢下来 1 网页的大小 网页加载速度与网页大小直接相关 站点的代码文
  • 2023 最新版IntelliJ IDEA 2023.1创建Java Web 项目详细步骤(图文详解)

    前言 本篇文章仅作为刚开始使用 IntelliJ IDEA 2023 1 创建一个简单的web项目的开发人员 只是作为入门使用 目前很多都是使用spring boot框架来搭建Java的web项目 但是spring boot的最新版本目前
  • C#System.ArgumentException

    C 自定义控件GDI绘制在主程序报错System ArgumentException 我的绘制图片内容大概如下 private Bitmap backGroundImage null private Bitmap prospectImage
  • Java 6-1 项目模块化-概念

    6 1 项目模块化 概念 一 组件化与模块化 组件化 以功能为依据 解决复用问题 初衷 可复用的代码 进行工具性的封装 目的 复用 解耦 依赖 各组件之间独立 低依赖甚至零依赖 架构 纵向 位于项目底层 被其他上层依赖 举例 Dialog