0
点赞
收藏
分享

微信扫一扫

游戏引擎学习第三天

小沙坨 2024-11-18 阅读 14

文章目录

在springcloud微服务项目中经常用到多模块化的架构设计,随着业务模块的增多,各个服务模块之间的依赖关系就越来越复杂;本文从项目起初的搭建,给出一套Model优秀设计方案。

一、模块化设计所遵循的原则

  1. 单一职责原则 (Single Responsibility Principle):

每个模块应该专注于执行一个清晰且明确定义的功能,遵循单一职责原则,以降低模块的复杂性。

  1. 高内聚性 (High Cohesion):

模块内的组件和类应该紧密相关,共同实现模块的目标。高内聚性有助于提高代码的可理解性和可维护性。

  1. 低耦合性 (Low Coupling):

模块之间的依赖应该尽可能减少,以便修改一个模块时不会对其他模块造成影响。低耦合性有助于实现独立的模块。

  1. 可重用性 (Reusability):

模块应该设计成可重用的组件,以便在项目的不同部分或未来的项目中能够复用。这通过提取通用功能到独立的模块(如common模块)来实现。

  1. 清晰的界限和接口 (Clear Boundaries and Interfaces):

模块之间的界限和接口应该明确,确保模块之间的交互清晰可见。这有助于团队成员理解各个模块的职责。

  1. 适度的模块化 (Moderate Modularity):

将功能相近的组件放在同一模块中,但避免过度细化,以免引入不必要的复杂性。适度的模块化有助于提高项目的可维护性。

  1. 分层架构 (Layered Architecture):

通过采用分层架构,如控制层、服务层、数据访问层等,有助于模块的划分和管理。这有助于代码的组织和理解。

  1. 依赖倒置原则 (Dependency Inversion Principle):

模块之间的依赖关系应该依赖于抽象而不是具体的实现。这有助于降低模块之间的耦合性。

  1. 测试容易性 (Testability):

模块应该设计成易于测试的单元,以便进行单元测试、集成测试和端到端测试。

  1. 适应未来扩展 (Adaptability for Future Extension):

模块设计应该考虑未来的扩展性,以便在需求变化时能够轻松地添加新功能或模块。

二、项目架构设计

整体项目使用的是Maven管理的项目。架构:

├─tigerhhzz-admin
│ └─src
│ ├─main
│ │ ├─java
│ │ │ └─com
│ │ │ └─tigerhhzz
│ │ │ └─admin
│ │ └─resources
│ └─test
│ └─java
│ └─com
│ └─tigerhhzz
│ └─admin
├─tigerhhzz-business
│ └─src
│ ├─main
│ │ └─java
│ │ └─com
│ │ └─tigerhhzz
│ │ └─business
│ └─test
│ └─java
│ └─com
│ └─tigerhhzz
│ └─business
├─tigerhhzz-common
│ └─src
│ └─main
│ └─java
│ └─com
│ └─tigerhhzz
│ └─common
├─tigerhhzz-core
│ └─src
│ └─main
│ └─java
│ └─com
│ └─tigerhhzz
│ └─core
├─tigerhhzz-generatorcode
│ └─src
│ ├─main
│ │ ├─java
│ │ │ └─com
│ │ │ └─tigerhhzz
│ │ │ └─generatorcode
│ │ │ ├─config
│ │ │ ├─controller
│ │ │ ├─domain
│ │ │ ├─mapper
│ │ │ ├─service
│ │ │ └─util
│ │ └─resources
│ │ └─mapper
│ └─test
│ └─java
│ └─com
│ └─tigerhhzz
│ └─generatorcode
└─tigerhhzz-web
└─src
├─main
│ └─java
│ └─com
│ └─tigerhhzz
│ └─web
└─test
└─java
└─com
└─tigerhhzz
└─web

项目目录结构总览

在这里插入图片描述

三、各个模块作用说明

3.1 core 模块

应用概述: core 模块是整个项目的核心,专注于提供通用的配置和基础服务。主要功能: 可能包含 Spring Boot 的核心配置、通用的拦截器、全局异常处理等。角色定位: 不包含具体的业务逻辑,主要为其他模块提供基础设施。pom文件:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.tigerhhzz</groupId>
        <artifactId>tigerhhzz-cloud</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <groupId>com.tigerhhzz.core</groupId>
    <artifactId>tigerhhzz-core</artifactId>
    <packaging>jar</packaging>

    <name>tigerhhzz-core</name>
    <url>http://maven.apache.org</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>${springboot.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <version>${springboot.version}</version>
        </dependency>

        <!-- MyBatis-plus -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>${mybatis-plus.version}</version>
        </dependency>

        <!-- Mysql驱动包 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${mysql-connector-java.version}</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>com.tigerhhzz.business</groupId>
            <artifactId>tigerhhzz-business</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>
</project>

3.2 common 模块

应用概述: common 模块用于存放通用的工具类和公共配置,为整个项目提供共享的基础。主要功能: 包含通用的工具方法、常量、公共配置等。角色定位: 不包含具体的业务逻辑,主要为其他模块提供通用功能。pom文件:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.tigerhhzz</groupId>
        <artifactId>tigerhhzz-cloud</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <groupId>com.tigerhhzz.common</groupId>
    <artifactId>tigerhhzz-common</artifactId>
    <packaging>jar</packaging>

    <name>tigerhhzz-common</name>
    <url>http://maven.apache.org</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
            <version>${springboot.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
            <version>${springboot.version}</version>
        </dependency>

        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>${commons-lang.version}</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>

3.3 generatorcode模块

应用概述: generatorcode模块可能是一个工具模块,用于生成代码或加速开发过程。主要功能: 可能包含代码生成器、模板引擎等,用于生成基础代码结构。
角色定位: 可能是一个开发辅助工具,用于提高代码生成的效率。pom文件:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.tigerhhzz</groupId>
        <artifactId>tigerhhzz-cloud</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <groupId>com.tigerhhzz.generatorcode</groupId>
    <artifactId>tigerhhzz-generatorcode</artifactId>
    <packaging>jar</packaging>

    <name>tigerhhzz-generatorcode</name>
    <url>http://maven.apache.org</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity-engine-core</artifactId>
            <version>${velocity-engine-core}</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>com.tigerhhzz.common</groupId>
            <artifactId>tigerhhzz-common</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>
</project>

3.4 business 模块

应用概述: business 模块是项目的业务核心,包含实际的业务逻辑和数据库访问。主要功能: 包含与业务相关的服务、领域逻辑、数据库访问(如 MyBatis、Redis)、业务配置等。角色定位: 为整个项目提供具体的业务功能,可能包括订单处理、用户管理等。pom文件:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.tigerhhzz</groupId>
        <artifactId>tigerhhzz-cloud</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <groupId>com.tigerhhzz.business</groupId>
    <artifactId>tigerhhzz-business</artifactId>
    <packaging>jar</packaging>

    <name>tigerhhzz-business</name>
    <url>http://maven.apache.org</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>com.tigerhhzz.common</groupId>
            <artifactId>tigerhhzz-common</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

        <dependency>
            <groupId>com.tigerhhzz.web</groupId>
            <artifactId>tigerhhzz-web</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>
</project>

3.5 web 模块

应用概述: web模块可能是与第三方服务集成的模块,处理外部服务的调用和数据交互。主要功能: 包含与第三方服务通信的代码、集成配置等。角色定位: 为整个项目提供与外部系统的连接,可能包括支付网关、第三方 API 等。

pom文件:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.tigerhhzz</groupId>
        <artifactId>tigerhhzz-cloud</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <groupId>com.tigerhhzz.web</groupId>
    <artifactId>tigerhhzz-web</artifactId>
    <packaging>jar</packaging>

    <name>tigerhhzz-web</name>
    <url>http://maven.apache.org</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>com.tigerhhzz.common</groupId>
            <artifactId>tigerhhzz-common</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>
</project>

3.6 admin 模块

应用概述: admin 模块可能是项目的管理界面,提供对系统的监控和管理功能。主要功能: 包含管理界面的业务逻辑、前端代码、可能的后台服务等。角色定位: 为管理员提供系统监控、用户管理等功能。pom文件:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.tigerhhzz</groupId>
        <artifactId>tigerhhzz-cloud</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <groupId>com.tigerhhzz.admin</groupId>
    <artifactId>tigerhhzz-admin</artifactId>
    <packaging>jar</packaging>

    <name>tigerhhzz-admin</name>
    <url>http://maven.apache.org</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>com.tigerhhzz.core</groupId>
            <artifactId>tigerhhzz-core</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

        <dependency>
            <groupId>com.tigerhhzz.generatorcode</groupId>
            <artifactId>tigerhhzz-generatorcode</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>
</project>

3.7 父pom

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.tigerhhzz</groupId>
  <artifactId>tigerhhzz-cloud</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>pom</packaging>

  <name>tigerhhzz-cloud</name>
  <url>http://maven.apache.org</url>
  <modules>
    <module>tigerhhzz-admin</module>
    <module>tigerhhzz-business</module>
    <module>tigerhhzz-common</module>
    <module>tigerhhzz-core</module>
    <module>tigerhhzz-generatorcode</module>
    <module>tigerhhzz-web</module>
  </modules>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <java.version>1.8</java.version>
    <aspectjrt.version>1.9.5</aspectjrt.version>
    <javax.validation>2.0.1.Final</javax.validation>
    <commons-beanutils.version>1.9.4</commons-beanutils.version>
    <maven.compiler.plugin.version>3.7.0</maven.compiler.plugin.version>

    <!-- spring -->
    <springboot.version>2.3.2.RELEASE</springboot.version>
    <spring-security-crypto.version>5.3.3.RELEASE</spring-security-crypto.version>
    <spring.mvc.version>5.2.8.RELEASE</spring.mvc.version>

    <!-- alibaba -->
    <!--        <pandora-boot.version>2023-07-stable-hsf</pandora-boot.version>-->
    <pandora-boot.version>2019-06-stable</pandora-boot.version>
    <pandora.boot.maven.plugin.version>2.1.11.8</pandora.boot.maven.plugin.version>
    <!-- 文件上传 -->
    <aliyun-sdk-oss.version>3.10.2</aliyun-sdk-oss.version>
    <!-- nacos -->
    <nacos.client.version>1.2.0</nacos.client.version>
    <nacos.config.spring.boot.starter.version>0.2.7</nacos.config.spring.boot.starter.version>
    <com.alibaba.edas.acm.sdk.version>1.0.9</com.alibaba.edas.acm.sdk.version>
    <!--  rabbitmq-->
    <spring.boot.starter.amqp.version>2.3.1.RELEASE</spring.boot.starter.amqp.version>
    <amqp.client.version>5.5.0</amqp.client.version>
    <mq.amqp.client.version>1.0.5</mq.amqp.client.version>

    <!-- redis -->
    <redis.clients.jedis.version>2.9.3</redis.clients.jedis.version>
    <shiro-redis.version>3.2.3</shiro-redis.version>

    <!-- 序列化 -->
    <com.caucho.hessian.version>4.0.63</com.caucho.hessian.version>
    <gson.version>2.8.6</gson.version>

    <!-- websocket -->
    <org.java-websocket.version>1.5.1</org.java-websocket.version>

    <!-- mybatis -->
    <mysql-connector-java.version>8.0.21</mysql-connector-java.version>
    <mybatis-plus.version>3.3.0</mybatis-plus.version>
    <pagehelper.version>5.2.0</pagehelper.version>
    <pagehelper-spring-boot-starter.version>1.3.0</pagehelper-spring-boot-starter.version>

    <!-- shiro -->
    <org.apache.shiro.version>1.5.3</org.apache.shiro.version>

    <!-- tools -->
    <lombok.version>1.16.20</lombok.version>
    <commons-beanutils.version>1.9.3</commons-beanutils.version>
    <easypoi-annotation.version>4.2.0</easypoi-annotation.version>
    <poi.version>4.1.2</poi.version>
    <swagger2.version>2.9.2</swagger2.version>
    <models.version>1.6.2</models.version>
    <annotations.version>1.6.2</annotations.version>
    <guava.version>28.0-jre</guava.version>
    <!--工具包-->
    <hutool.version>5.5.9</hutool.version>
    <commons-lang.version>3.9</commons-lang.version>

    <velocity-engine-core>2.2</velocity-engine-core>

    <!-- 模板引擎 -->
    <org.freemarker.version>2.3.30</org.freemarker.version>
    <!-- 参数校验 -->
    <hibernate.validator.version>6.1.0.Final</hibernate.validator.version>
    <!--        junit-->
    <junit.version>4.13</junit.version>

    <!-- netty版本 -->
    <netty.all.version>4.1.6.Final</netty.all.version>

    <!-- ip2region版本 -->
    <ip2region.version>1.7.2</ip2region.version>

    <!-- mapstruct版本 -->
    <org.mapstruct.version>1.4.2.Final</org.mapstruct.version>

    <!-- 阿里云短信版本 -->
    <aliyun.sms.version>2.0.9</aliyun.sms.version>
    <com.alibaba.easyexcel.version>3.1.4</com.alibaba.easyexcel.version>

    <!-- xxl-job版本 -->
    <xxl-job-version>2.3.0</xxl-job-version>

    <!-- redisson版本 -->
    <redisson-spring-boot.version>3.17.6</redisson-spring-boot.version>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

四、采用import引入SpringBoot

为什么采用import引入SpringBoot?

import 语句可以用于将其他 Maven 项目中的 POM 文件导入到当前项目中。

这样,可以实现模块化的项目管理。使用 import 语句导入其他项目的依赖时,可以在导入时指定版本,使得项目能够更加灵活地选择使用依赖的版本。可以将相关的模块组织到不同的 Maven 项目中,通过 import 在一个父项目中统一管理。这有助于更好地组织项目的结构。

在这里插入图片描述


在你停下来的时候,不要忘记别人还在后面奔跑,在你放弃的时候,不要忘记别人就在你的前面,只差一步而已。


举报

相关推荐

0 条评论