干净的纯 Typescript 应用程序架构的资源
Resources for clean pure Typescript app architecture
我需要创建一个使用 API 连接到数据库的纯 Typescript 应用程序。我正在寻找一个尽可能干净的架构示例。我希望我的应用程序:
- 从 API 获取数据并将此数据映射到 Typescript 对象
- 以某种方式存储它(没有任何持久性,仅用于会话)
- 响应用户界面并调用适当的数据访问层函数
- 将所有内容传递给将绘制数据图表的外部库
这是我想象中的草图
主要问题是,到目前为止,我主要是在 React 中创建这些东西,现在我不得不使用普通的 Typescript。我已经陷入糟糕的架构陷阱太多次了,希望这个能成为最干净的一个。
有什么好的资源吗?可能简单干净的应用程序代码示例(没有图形库,只有简单的数据表示)就是我要找的。
我倾向于使用这种方法:https://morphological.wordpress.com/2011/08/29/5-layer-architecture/
它不是特定于 Typescript 的,但应该很适合它。我假设“纯”和“干净”是指关注点分离 - 包括使用依赖注入以确保您在未来具有灵活性。
下面层的使用是指代码库中的逻辑分离。
将其应用于您的情况:
- UI 和不同层中的应用程序逻辑。
- 公共层中的 Dumb DTO/POCO 提供了整个系统的公共词汇表。这将 不 包括特定于任何数据库或 API 提供程序的数据映射相关对象 - 这些对象将存在于有问题的 data/API 提供程序中。
- 逻辑层通过抽象层表示的代码接口与数据库、APIs、外部组件等接口。
- 每个“提供者”(数据库,API,随便什么)在抽象层内由一个或多个接口定义(注意 Interface Segregation Principle)。
- 然后每个提供者可以有一个或多个具体实现,这些实现在运行时使用某种依赖注入机制加载。
图形组件与其他提供程序一样被抽象出来。原因是:
- 他们(提供者)都提供逻辑层想要 consume/interact 的“东西”(数据/功能)——但我们希望保持这些松散耦合。
- 它们都是(或可能是)专门的 - 具有各种依赖性,我们希望尽可能远离代码库的其余部分。
如果您公开(而不是消耗)一个面向外部的 API,则有可能将其放在表示层中(逻辑上位于 UI 旁边),但事实并非如此看起来你需要那个。
依赖注入/反转可以像您希望的那样简单或复杂。
我需要创建一个使用 API 连接到数据库的纯 Typescript 应用程序。我正在寻找一个尽可能干净的架构示例。我希望我的应用程序:
- 从 API 获取数据并将此数据映射到 Typescript 对象
- 以某种方式存储它(没有任何持久性,仅用于会话)
- 响应用户界面并调用适当的数据访问层函数
- 将所有内容传递给将绘制数据图表的外部库
这是我想象中的草图
主要问题是,到目前为止,我主要是在 React 中创建这些东西,现在我不得不使用普通的 Typescript。我已经陷入糟糕的架构陷阱太多次了,希望这个能成为最干净的一个。
有什么好的资源吗?可能简单干净的应用程序代码示例(没有图形库,只有简单的数据表示)就是我要找的。
我倾向于使用这种方法:https://morphological.wordpress.com/2011/08/29/5-layer-architecture/
它不是特定于 Typescript 的,但应该很适合它。我假设“纯”和“干净”是指关注点分离 - 包括使用依赖注入以确保您在未来具有灵活性。
下面层的使用是指代码库中的逻辑分离。
将其应用于您的情况:
- UI 和不同层中的应用程序逻辑。
- 公共层中的 Dumb DTO/POCO 提供了整个系统的公共词汇表。这将 不 包括特定于任何数据库或 API 提供程序的数据映射相关对象 - 这些对象将存在于有问题的 data/API 提供程序中。
- 逻辑层通过抽象层表示的代码接口与数据库、APIs、外部组件等接口。
- 每个“提供者”(数据库,API,随便什么)在抽象层内由一个或多个接口定义(注意 Interface Segregation Principle)。
- 然后每个提供者可以有一个或多个具体实现,这些实现在运行时使用某种依赖注入机制加载。
图形组件与其他提供程序一样被抽象出来。原因是:
- 他们(提供者)都提供逻辑层想要 consume/interact 的“东西”(数据/功能)——但我们希望保持这些松散耦合。
- 它们都是(或可能是)专门的 - 具有各种依赖性,我们希望尽可能远离代码库的其余部分。
如果您公开(而不是消耗)一个面向外部的 API,则有可能将其放在表示层中(逻辑上位于 UI 旁边),但事实并非如此看起来你需要那个。
依赖注入/反转可以像您希望的那样简单或复杂。