当前位置: 首页 > 知识库问答 >
问题:

java - 如何解耦相对路径引入的文件呢?

轩辕实
2024-09-05

有如下的结构:

src/db/service/users.service.ts

src/actions/users.handlers.ts

src/actions/users.handlers.ts中需要引入相对路径:

import UserService from '../../db/service/users.service'

export const UsersHandlers = (): void => {
  ...
}

但是我觉得这样它们(db/ 和 actions/)就耦合在一起了。
请问是否有一些设计的方式让它们解耦?比如:依赖反转等方式。

共有1个答案

卢伟志
2024-09-05

解耦模块之间通过相对路径引入的依赖可以通过多种设计模式和架构原则来实现,以下是一些常用的方法:

1. 使用服务层(Service Layer)和接口(Interfaces)

在项目中定义一个服务层,并在这个层中定义接口。这些接口描述了服务的行为,而不具体实现它们。然后,让不同的模块(如dbactions)依赖于这些接口,而不是具体的实现。

步骤

  1. 定义接口:在src/services(或类似的目录)中定义服务的接口。
  2. 实现接口:在src/db/service中实现这些接口。
  3. 依赖注入:在src/actions中通过依赖注入的方式使用这些服务,而不是直接通过相对路径引入。

2. 依赖注入(Dependency Injection)

依赖注入是一种常用的技术,它允许你将依赖项(如服务)的创建和绑定推迟到运行时,从而减少了代码之间的耦合。你可以使用框架(如Angular、NestJS等)或手动实现依赖注入。

示例(假设使用NestJS)

  • 服务定义src/db/service/users.service.ts):

    import { Injectable } from '@nestjs/common';
    
    @Injectable()
    export class UsersService implements IUserService {
      // 实现接口
    }
  • 服务使用src/actions/users.handlers.ts):
    在NestJS中,你可以通过构造函数注入服务:

    import { Injectable } from '@nestjs/common';
    import { UsersService } from '../../db/service/users.service';
    
    @Injectable()
    export class UsersHandlers {
      constructor(private usersService: UsersService) {}
    
      handleSomething(): void {
        // 使用 usersService
      }
    }

3. 模块化(Modularity)

确保你的应用被清晰地划分为不同的模块。每个模块负责一组特定的功能,并且只通过定义良好的接口与其他模块交互。

4. 抽象层(Abstraction Layers)

引入抽象层可以帮助隐藏实现细节,并允许在不修改其他模块的情况下更改实现。

5. 使用容器(Containers)

在更复杂的应用中,可以使用依赖注入容器来管理依赖项的生命周期和注入。

结论

通过这些方法,你可以有效地减少src/dbsrc/actions之间的耦合,使得你的应用更加模块化和可维护。每种方法都有其适用场景,你可以根据项目的具体需求选择最合适的一种或多种方法。

 类似资料:
  • 问题内容: 我希望我的Web应用程序使用以下路径登录文件:webapp / logs / 我可以在log4j.properties文件中设置绝对路径,但是生产环境的目录结构将有所不同。有什么办法可以做到吗? 这是我的方法: 这是将日志打印到我的eclipse目录(c:// eclipse)中名为log.log的文件中。我正在使用Tomcat 6。 问题答案: log4j能够扩展系统属性,因此,如果

  • 问题内容: 我想知道如何指定存储在Java项目的src文件夹中的文本文件的相对路径名。我想用此文本文件的路径存储一个字符串。例如,如果我的java项目的src文件夹中有example.txt,我将如何查找其相对路径?我也在我的主机中这样做,所以我在使用.getResource()时遇到了麻烦。我该怎么做?谢谢。 我的文件路径是从Eclipse /MyProject/src/data.txt中的属性

  • 问题内容: 所以这是我的程序,可以正常工作: 如您所见,我正在使用我要读取的文件的绝对路径: 当我尝试使用相对路径时会出现问题: 我收到一个错误: 文件usnumbers.txt与ScanSum.class文件位于同一目录中: 我该如何解决? 问题答案: 从哪个目录执行该类文件?(这将是相对路径的当前工作目录和基本目录。) 如果仅从eclipse启动应用程序,则项目目录将是工作目录,在这种情况下,

  • V1.1.1新增 sp_asset_relative_url($asset_url) 功能: 获取文件相对路径 参数: $asset_url:文件URL 返回 类型字符串,带协议的绝对地址直接返回原来的值,否则会转化为相对于系统upload 目录的文件路径 实例 <?php $file='/data/upload/1.png';//文件路径 $path=sp_asset_relative_url

  • 问题内容: 节点中是否有类似“ path.resolve”的API?还是有什么可以做的? 例如(nodejs代码): 应该得到: 问题答案: 解决(表示用户的家)是另一回事,通常是由外壳来解决。。 如果要通过Go代码执行此操作,则可以使用该函数获取有关当前用户的详细信息,包括其主文件夹(即)。但是,您仍然必须自己替换它。 原始答案如下。 您可以使用或。 例如: 输出: 您可以使用和从路径中“删除”

  • 问题内容: 因此,我2009年的新年决心是学习Java。我最近购买了“ Java for Dummies”,并通过使用Eclipse重新编写代码来遵循本书中的演示代码。无论如何,书中使用相对路径的每个示例似乎都不会读取应该从中读取的.txt文件。 这是示例代码: 您可以在下面的屏幕快照中看到我已包含此文件。 图片不再可用 此外,我已经验证过,在构建应用程序时,将Hankees.txt的副本与已编译