You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Clean Architecture中Gateways与Adapters的最优结构选型(TypeScript+TDD)

Clean Architecture + TypeScript 网关与适配器方案选型咨询

我正在开展一个基于Clean Architecture、TypeScript和TDD的项目,核心关注点是正确构建网关(Gateways)和适配器(Adapters),尤其是数据库适配器。

有观点建议避免使用类以减少开销与资源占用,基于此我探索了两种结构方案:

  • 方案一:将网关定义为接口,适配器作为接口的实现;
  • 方案二:将网关定义为接收适配器作为参数的高阶函数(返回函数的函数);

我已完成两种方案的简易实现。方案一更安全,为适配器提供清晰的契约,且更直观;方案二则通过在网关中插入逻辑实现更高灵活性,但代价是安全性降低、复杂度提升。

现寻求社区的看法与建议:哪种方案更推荐?原因是什么?能否针对我实现的结构提供示例或反馈?

以下是代码片段供参考:

网关代码示例

interface OrderGateway1 {
  getAll: () => Promise<Order[] | undefined>
  getById: (orderId: string) => Promise<Order | undefined>
}

const orderGateway2 = (orderDbAdapter: any) => {
  return {
    getAll: (): Order[] => orderDbAdapter.getAll(),
    getById: (orderId: string): Order => orderDbAdapter.getById(orderId),
  }
}

内存存储适配器代码示例

const orderInMemoryDbAdapter1: OrderGateway1 = (() => {
  const ordersDb: Order[] = [...inMemoryDb.orders]
  return {
    getAll: () => Promise.resolve(ordersDb),
    getById: (orderId: string) => Promise.resolve(ordersDb.find((order) => order.id === orderId)),
  }
})()


const orderInMemoryDbAdapter2 = () => {
  const ordersDb: Order[] = [...inMemoryDb.orders]
  return {
    getAll: () => ordersDb,
    getById: (orderId: string) => ordersDb.find((order) => order.id === orderId),
  }
}

JSON Server存储适配器代码示例

const orderJsonServerDbAdapter1: OrderGateway1 = {
  getAll: async (): Promise<Order[] | undefined> => {
    const result = await api.get<Order[]>('/orders')
    return result
  },
  getById: async (id: string): Promise<Order | undefined> => {
    const result = await api.get<Order>(`/orders/${id}`)
    return result
  },
}

const orderJsonServerDbAdapter2 = () => {
  return {
    getAll: async (): Promise<Order[] | undefined> => {
      const result = await api.get<Order[]>('/orders')
      return result
    },
    getById: async (id: string): Promise<Order | undefined> => {
      const result = await api.get<Order>(`/orders/${id}`)
      return result
    },
  }
}

内容的提问来源于stack exchange,提问作者Fab

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 09:35:44