infraship

module
v0.0.0-...-fa01437 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 20, 2024 License: GPL-3.0

README

Infraship

Golang base infrastructure 用于存放项目运行的各种各样的基础设施, 方便快捷的支撑Domain层的业务逻辑

[TOC]

目录结构

infra包中虽然存放的是基础设施的代码, 原则上应该避免互相调用, 保持独立, 但实际上, 为了支撑业务需求以及方便抽象出通用的部分, 很难避免模块间的调用, 因此, 为了避免调用关系的混乱, 需要为每个模块标识出调用Level.

采用如下方式约束调用链 L1 <- L2 <- L3 L1表示最底层的模块, 它是infra下所有调用的源头, 被标识为L1的模块严格禁止调用别的模块的内容

  • L1: 完全与业务无关的模块, 例如: 日志, 监控, 熔断限流等组件, 公共函数和方法等(这里的完全业务无关是指:不依赖特定的服务, 不包含特定的业务代码)
  • L2: 原则上它也是业务无关的模块, 例如: mysql client, redis client等, 本质上它也可以无缝移植到各个服务中去, 但往往它可能需要记录日志, 上报信息, 调用一些通用的公共处理方法, 它现在或者将来可能需要依赖L1模块中的函数或方法
  • L3: 业务相关的基础模块, 有一定的项目相关性, 可能会依赖L2,L1的相关基础模块

注意⚠️: 需要保证L1 L2的目录可以随时可以抽象移动到公共基础库中

目录说明

  • [L3] application 作为服务通用的入口, 并管理整个服务的生命周期, 维护业务相关的组件和模块
  • [L1] gobject global object用于管理和维护全局对象
  • [L1] logger 日志组件
  • [L2] connector 用于放置各种用于链接外部服务, 它仅仅用于描述, 如何构建一个用于与外部服务沟通的客户端, 例如mysql客户端, redis客户端等等
    • connector.go 定义接口用于描述一个connector需要实现哪些方法
    • database/ 实现数据库的connector
    • cache/ 实现缓存的connector
    • web/ 实现web相关的各种connector
  • [L1] kit 存放各种工具函数, 并封装一些完全业务无关的公共组件
  • [L1] x 用于扩展, 封装标准库或者三方库, 便于这些库使用起来简单方便
  • [L1] def 用于定义各种接口公共常量等
    • 每个项目一个单独的目录, 必须提供 rpc.go 的服务接口定义

Directories

Path Synopsis
web
kit
x

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL