https://github.com/gaubee/tsq
The next generation service framework is based on TypeScript
https://github.com/gaubee/tsq
dependency-injection microservice typescript
Last synced: 4 months ago
JSON representation
The next generation service framework is based on TypeScript
- Host: GitHub
- URL: https://github.com/gaubee/tsq
- Owner: Gaubee
- Created: 2017-12-12T01:20:37.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2017-12-23T13:37:11.000Z (over 8 years ago)
- Last Synced: 2024-12-28T17:44:43.383Z (over 1 year ago)
- Topics: dependency-injection, microservice, typescript
- Language: TypeScript
- Size: 60.5 KB
- Stars: 0
- Watchers: 1
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# TSQ
这是一个实验性的框架,使用了一些实验性的API。
但很多概念还是有待商榷的。不过可以通过做减法来使用那些稳定的概念。
**重度依赖TypeScript,目的是为了实现Angular一样的依赖注入。**
## 为什么要用TypeScript
在团队开发中,有一个不可避免的沟通成本。API调用是否正确?API破坏性更改引起的涟漪效应是否有全部解决?
使用TypeScript的强类型约束与编译,可以用来解决这些问题。
## 为什么要做依赖注入
在微服务开发中。如若直接写RPC的调用,TypeScript的强类型约束无法直接在两个代码库之间进行推断。
使用依赖注入的话,开发者**不需要关心RPC的调用**,靠着TypeScript的代码智能提示与类型检测,能写出安全的数据传输。
使得代码完全与框架脱离关系。
如下代码:
[B.service.ts](https://github.com/Gaubee/tsq/blob/7d896ff4c8d429b730ea2ca862cc63996eeb6102/test/B.service.ts)
```ts
export class B {
constructor(public a: A) { }
async callA(name: string) {
return await this.a.sayHi(name);
}
add(a: number, b: number) {
return this.a.add(a, b);
}
}
```
B模块依赖与A模块,在调用A模块的时候,可以以最原始的方式去调用A模块的实例的方法,异步方法,甚至是同步方法,而这A模块的服务运行在另外一个进程中,可同时供养于其它服务。
## DEMO
建议安装[ts-node](https://www.npmjs.com/package/ts-node)
### 第一步: 启动中央服务
```shell
ts-node test/center.service.ts
```
### 第二步: 启动A服务
```shell
ts-node test/A.service.ts
```
### 第三步: 启动B服务
```shell
ts-node test/B.service.ts
```
> PS: 以上三步可以以任意的顺序启动。互相依赖的服务在有一端断开后都会自动重连。
### 第四部:打开浏览器进行访问测试
* **测试异步调用** https://localhost:8443/qaq/hi?name=gaubee
* **测试同步调用** https://localhost:8443/qaq/add/1/2.2