发布于 2026-01-06 0 阅读
0

Booster Framework 火爆的原因揭秘 🔥😈 Booster Framework 来了!接下来该做什么呢?DEV 全球展示挑战赛,由 Mux 呈现:快来展示你的项目吧!

解释一下 Booster Framework 为何如此火爆 🔥😈

进入Booster框架

好了,现在该怎么办?

由 Mux 赞助的 DEV 全球展示挑战赛:展示你的项目!

让我们达成一个共识:编写后端代码很难,而且我们在这方面做得非常糟糕。

没错,我们都很擅长创建 Express 服务器,并在上面附加 MongoDB 或 MySQL,但是之后呢?

你确定你的专用服务器已经为应用开始成功上线做好准备了吗?没错,你可以优化服务器、加固Linux系统、移除不必要的软件包、停止一些服务等等。但无论如何,你最终还是需要升级服务器,购买更昂贵的服务器。但如果升级仅仅是为了应对网站访问量激增的那短暂时刻呢?你会为了控制预算而缩减服务器规模吗?还是继续支付服务器费用?你有没有考虑过添加负载均衡器?

解决方案显而易见:无服务器架构和云计算!

可惜,现实并非如此。为什么呢?因为这意味着要学习更多东西,而且这不像学习一个新的库/工具,而是海量的信息。你已经考虑过云平台了吗?AWS、Azure、Google Cloud Platform?

假设你选择了 AWS,这里还有一些问题:你会使用 DynamoDB 吗?还是 Aurora?你知道如何查询这些数据库吗?你的编程语言和数据库组合是否有可用的 ORM?你是手动部署所有这些基础设施,还是使用 Terraform 或 Serverless 之类的工具?顺便问一下,你对 YAML 熟悉吗?😂

不仅如此,现在你的代码会在不同的函数中执行。别试图把整个 Express 服务器打包进去。至少如果你珍惜你的钱包的话😅

你已经考虑过应用的架构了吗?你会通过队列来传递应用的不同部分的信息吗?你会直接调用函数吗?你会直接将数据存储到数据库中吗?还是数据库更像是一个缓存?🤔

另外,请记住,您需要在前端创建一个合适的 SDK 才能与后端进行交互。

哦!我差点忘了!你打算给你的应用添加分析功能吗?如果你现在就考虑一下这个,那就太好了,这样你就可以从一开始就收集数据了。

最后再说一句:祝你维护顺利。👌

男子跳窗自杀

你或许是那种看到上面文字后会想“这一切有什么问题呢?这是成长的一部分,我可以接受把 95% 的时间花在学习和维护这些东西上,我是一名开发人员”。

抱歉,但那样的话,你就错过了很多好东西。

我想我们都同意,如今的日常开发工作中,修改指针和寄存器已经不再是主流做法了。当然,确实有一小部分人会这样做来优化系统速度,但这并非我们大多数人的做法。为什么?因为开发速度才是关键。

这些功能的使用方式已经为我们进行了抽象化处理,因此我们减少了无关代码的编写,而增加了真正重要的代码编写:那些使我们的应用与众不同的代码。

字体也是如此,你不需要每次都为你的应用程序设计字体,而是只需选择最适合使用场景的字体即可。

如果我告诉你,有一种方法可以抽象化所有与后端开发相关的复杂内容,让你只专注于代码中那些真正让你的应用程序与众不同的部分,你会怎么想?

进入Booster框架

Booster 是一个 TypeScript 框架,它凝聚了The Agile Monkeys团队多年来与 eBay、PayPal、Rent the Runway 和 Zara 等公司合作的经验。他们厌倦了不断重复造轮子,于是打造了这款终极后端框架。

前提很简单:让开发者的工作更轻松。

那么,Booster 的特别之处在哪里呢?

它:

  • 无需任何后端开发经验。
  • 让你无需再为服务器操心。
  • 无需配置数据库。
  • 无需配置端点。
  • 无需仔细阅读文档,即可部署到您喜爱的云平台。
  • 在您不使用已部署的应用时,免除其所有费用。
  • 为您的应用内置分析数据收集功能。
  • 它可以通过插件进行扩展,以便您真的可以调整某些内容(我们称这些为火箭)。

此外,你不必考虑架构,Booster 已经考虑到了这一点,他从上述企业项目和许多其他项目中提取了相关经验。

那么,该如何使用呢?

我不会深入讲解实际用法,因为这不是教程,但我会向您展示足够的内容,让您了解在使用 Booster 时会发生什么。

使用 Booster 时,你会经常用到boost它自带的命令行工具。Booster 有一些样板代码,但你甚至都不想自己写。

我并非总是编写样板代码,但如果需要,我会使用 Boost CLI。

如何配置应用?神奇之处在于,你根本不需要配置!你只需要围绕以下概念编写应用即可:

命令

命令是一个包含若干字段的类,它代表向系统发出的指令,以及一个handle用于验证这些字段并注册某些事件的方法(我们将在下一节中讨论这些事件)。命令的示例通常是“用户可以……”这句话的延续,例如:

  • 用户可以存款。
  • 用户可以发送消息
  • 用户可以创建聊天室

命令实际运行效果如何?就是 TypeScript 代码,而且最棒的是,大部分代码都是自动生成的!使用类似这样的命令,你会得到一个包含 以下内容的boost new:command DepositMoney --fields accountId:UUID amount:number文件:src/commands

@Command({
  authorize: ...
})
export class DepositMoney {
  constructor(
    readonly accountId: UUID,
    readonly amount: number
  ) {}

  public async handle(register: Register): Promise<void> {
    register.events(...)
  }
}
Enter fullscreen mode Exit fullscreen mode

现在,您需要在第二行指定谁可以执行此命令,在handle方法内部编写验证代码,并注册事件。就这么简单!无需 HTTP 方法、路由端点、深层控制器或其他任何东西,只有关键代码。

活动

与命令一样,事件的代码也是通过终端中的命令自动生成的,它们也是常规的 TypeScript 类。

还记得我说过你的应用已经集成了用于分析的数据收集功能吗?这都归功于事件!你无需修改数据库、执行查询等等,只需将这些更改表示为一个事件即可。Booster 会无限期地存储所有这些事件,这意味着你可以随时查看用户触发该错误的具体步骤,了解用户放弃注册流程是因为用户体验问题还是错误,思考如何优化新功能等等!

事件示例是指在发出命令后可以陈述的事实,其中许多都显而易见:

  • 已完成存款
  • 消息已发送
  • 创建房间

(注意ed

新创建的 Booster 活动如下所示:

@Event
export class DepositPerformed {
  public constructor(
    readonly accountId: UUID,
    readonly amount: number
  ) {}

  public entityID(): UUID {
    return this.accountId
  }
}
Enter fullscreen mode Exit fullscreen mode

实体

实体是应用程序的内部状态,但您无需直接修改它。Booster 会对Array.reduce您拥有的无限事件列表进行类似处理的操作,将其转换为可访问的对象。实体有很多用途,但最重要的用途是快照,从而确保后端运行速度极快

实体的例子包括应用程序中的概念,例如:

  • 银行账户
  • 对话
  • 聊天室

balance这是一个根据事件计算其值的实体DepositPerformed如果帐户尚不存在,则初始化balance为 0 :0

@Entity
export class BankAccount {
  public constructor(
    readonly id: UUID,
    readonly balance: number
  ) {}

  @Reduces(DepositPerformed)
  public static reduceDepositPerformed(event: DepositPerformed, current?: BankAccount): BankAccount {
    const currentBalance = current?.balance ?? 0             //    ^--  Note how this is optional, because at the beginning of your app, the account doesnt exist
    return new BankAccount(
      currentBankAccount.id,
      currentBalance + event.amount
    )
  }
}
Enter fullscreen mode Exit fullscreen mode

阅读模型

读取模型是将实体暴露给公众的一种方式。读取模型充当缓存,确保应用程序尽快获取数据。此外,它们还允许您组合不同的实体,并以适合前端的方式转换数据。以下是一个标准的 TypeScript 类:

@ReadModel({
  authorize: ...,
})
export class AccountReadModel {
  public constructor(
    public id: UUID,
    readonly balanceMessage: string,
  ) {}

  @Projects(BankAccount, 'id')
  public static projectBankAccount(entity: BankAccount, current?: AccountReadModel): AccountReadModel {
        let message = "Broke"
    if (entity.balance > 1000) {
      message = "Has sum money here, yo"
    } else if (entity.balance > 10000) {
      message = "Hey, this person is saving for sumthin'"
    } else if (entity.balance > 100000) {
      message = "Whoah, they gonna buy a house or what?"
    } else if (entity.balance > 1000000) {
      message = "They got a shit ton of money, yo!"
    }
    return new AccountReadModel(entity.id, message)
  }
}
Enter fullscreen mode Exit fullscreen mode

就是这样!

现在,要部署它,只需编写boost deploy -e production

就这样,就此结束。

老妇人做着dab动作

无需配置,无需控制面板,无需 YAML,什么都不用!只需按下一个按钮,你的应用就能部署到云端。

您的云平台已正确配置,包括所有安全措施、架构、服务互连等。

Booster 会输出一个 URL,这是一个 GraphQL 端点,仅此而已。

没错,但是我该如何将它连接到我的前端呢?

因为它是 GraphQL,所以你可以完全使用像Apollo这样的库来连接它。

使用 React?Vue?Svelte?Elm?没问题,只需使用 Apollo 适配器即可。无需编写 SDK/服务来与后端通信。

命令可以通过变更(Mutations)执行,读取的模型可以进行查询或订阅。就是这样,无需对 URL 进行编码,无需记住参数顺序,无需使用 Swagger 创建 API 文档等等。只需使用你编写的代码即可。

这好得令人难以置信,肯定很贵吧?

不,这个框架完全免费且开源。如果您担心云服务的费用,所有 Booster 项目
都符合 AWS 免费套餐的条件,即使不使用免费套餐,一个月内 40,000 次请求(顺便说一下,是四万次)的费用也低于 1 美元。

(不,我们团队没有从云服务提供商那里获得任何分成,我们只是厌倦了那些制造问题而不是解决问题的工具😉)

好了,现在该怎么办?

如果你看到了这里,恭喜你,也感谢你的阅读!如今框架层出不穷,人们往往习以为常。但 Booster 却截然不同,它具有突破性意义。想了解更多信息,请访问项目网站,那里有文档、演示以及更多资源的链接。

我还建议你加入项目的Discord服务器,提出你的想法、见解和问题。一个项目如果停滞不前,就毫无意义,而你的挑战本身就是在帮助它!

Booster 也是Hacktoberfest的一部分,如果你想贡献一份力量的话(你懂的)。即使你不想贡献,在我们的GitHub 代码库里点个星标也意义非凡。

敬请期待更多精彩内容!

祝你今天过得愉快,后端开发也轻松顺畅 😉,
Nick

杰克·佩拉尔塔向兄弟们道别

文章来源:https://dev.to/boostercloud/explaining-the-hype-around-booster-framework-3cf2