【全栈开发】Blitz.js与RedwoodJS

技术的不断发展是必然的。如果你仔细观察这片土地,你会注意到随着技术的成熟而出现的某些模式。特别是,开发人员一直在努力提高性能,简化开发过程,增强开发人员体验。

在本指南中,我们将分析两个帮助全栈应用程序世界的开发人员实现这些目标的框架:Blitz.js和RedwoodJS。

什么是Blitz.js?

Blitz.js受到RubyonRails的启发,是一个全栈React框架,旨在帮助您尽快开发单片应用程序。它为您构建了大量样板代码,因此您可以只关注业务逻辑,并提供从数据库到前端的完整包。

blitz-scaffolding

Blitz.js enables you to request the database from the client itself using Prisma.

blitz-prisma

基本上,前端组件调用一个包含PrismaDB函数调用的函数。之后,Prisma将数据库中的数据返回给客户端。

对于客户端的数据管理,Blitz在后台使用了React Query。

什么是RedwoodJS?

RedwoodJS是一个根据JAMstack方法构建全栈应用程序的框架。如果您熟悉JAMstack并想构建一个全栈应用程序,Redwood就是您的框架。

Redwood类似于传统的老派方法,如客户端=>服务器=>数据库。

redwood-jamstack

客户端与服务器连接,在我们的案例中,服务器是GraphQL服务。Redwood使用Prisma连接数据库。一旦它获取了数据,它就会返回到客户端。

尽管这种方法很老,但它通过提供脚手架代码和内置模块,解决了与开发应用程序过程相关的许多问题。

使用Blitz.js构建全栈应用程序

既然我们了解了Blitz和Redwood是如何工作的,那么让我们使用每个框架构建一个全栈应用程序,并比较经验。

任何全栈应用程序的开发过程都包括三个关键阶段:

  • 设计数据库
  • 构建服务器端
  • 构建客户端

设置

您可以使用以下命令引导Blitz项目。

blitz new my-app

您将能够看到服务器和客户端的所有样板代码。

设计数据库

Blitz使用Prisma来管理数据库连接和模式。

blitz-design-database

To build a table, create a model in Prisma and run the following command.

Over 200k developers use LogRocket to create better digital experiences

​编辑Learn more →

blitz db migrate

现在,您可以直接从Blitz应用程序的客户端访问数据库。

构建服务器端

Blitz最好的一点是,您不需要单独管理服务器端代码。数据层在应用程序本身的客户端进行维护。

大多数时候,您只需要为特定功能创建一个CRUD。

Server-side Directory

正如您所看到的,查询和突变位于客户端应用程序目录本身内部。它还包含Prisma DB实例,您可以使用该实例访问模式。

Prisma DB Instance

通过这种方式,您可以编写自定义函数,或者扩展这些函数以在其中编写自己的逻辑。

就我个人而言,我觉得这在大多数应用程序开发场景中都派上了用场。

构建客户端

Building the Client Side

客户端使用useQuery,它是React Query的包装器,使用Prisma从数据库中获取数据。然后,它在React组件中呈现数据。

Building the Client Side

For a more detailed walkthrough on how to build a full-stack application using Blitz, check out “Building a fullstack React application with Blitz.js.”

使用RedwoodJS构建全栈应用程序

设置

要引导RedwoodJS项目:

yarn create redwood-app ./my-app

一旦您拥有了应用程序的所有样板代码,就可以开始构建服务器端和客户端了。

红木遵循单回购模式。要将任何库添加到客户端或服务器端,请使用以下命令。

yarn workspace web add react-query

yarn workspace api add jsonwebtoken

设计数据库

Redwood也使用Prisma作为数据层,因此逻辑与Blitz相同。唯一的区别是,在Prisma中完成架构后,需要运行以下命令。

rw db save rw db up

基本上,这将最新的模式保存为数据库快照,然后将更改迁移到数据库。

构建服务器端

Redwood管理API目录中的所有服务器端代码,该目录还包含带有SDL的GraphQL数据层和服务器的解析器。

Redwood GraphQL Data Layer

完成Prisma后,可以使用以下命令构建服务器代码,如SDL和服务文件。

yarn rw g sdl recipe

yarn rw g service recipe

这将用最少的样板代码生成SDL和服务脚手架。

SDL Service Scaffold

现在,您可以根据自己的特定需求对其进行自定义,并像往常一样运行GraphQL服务器。

构建客户端

在构建Redwood应用程序的客户端时,有四个关键的构建块需要关注。

1.页码

yarn rw generate page recipe

上面的命令创建了包含基本功能组件的配方页面。它还在route.js中添加了该页面的路由。

页面构建代码,这样您就不需要花时间从头开始编写代码。

2.布局

yarn rw generate layout header

布局是包装常见组件(如页眉和页脚)的简单方法。假设您需要在所有页面中都有页眉组件。在这种情况下,您可以将其作为红木布局,可以在所有组件中重复使用。

3.组件

yarn rw generate component recipe

组件为您生成React功能组件。您可以使用它来呈现页面组件。

4.细胞

yarn rw generate cell users

细胞是红木的标志性特征。单元的目的是将数据获取逻辑与组件分离。您不需要在组件本身中混合数据提取。

手机会帮你处理的。您所需要做的就是导入组件内部的单元格,并呈现从单元格返回的数据。

正如我之前所说,这些都是关于如何使用红木构建全栈应用程序的高级概述。要了解更多详细信息,请查看文章。

最后,我们学习了如何使用blitz.js和redwood.js构建应用程序。让我们对它们进行比较,并从开发人员的角度来看。

开发人员经验

在试用新框架时,最重要的因素之一是开发人员的经验。让我们根据以下标准来比较Blitz和Redwood的开发人员体验。

学习曲线

如果你是Prisma的新手,在使用Blitz或Redwood时可能会遇到学习曲线。从当前堆栈(React、Redux和GraphQL)切换可能有些困难。

对于Blitz,您只需要了解React和Prisma就可以进行大部分应用程序开发。根据您的需求,您可能还需要熟悉其他技术,如GraphQL、Node和无服务器功能。

对于Redwood,您需要了解React、Prisma和GraphQL。GrapQL是在Redwood中与Prisma和客户端交互的方式。

就我个人而言,当我需要尽快开发和转换应用程序时,我更喜欢Blitz。

开发时间

这两个框架都有助于减少开发时间。

如果您需要开发一个基本的CRUD应用程序,Blitz可能是您的最佳选择,因为您不需要处理GraphQL。

也就是说,Redwood有更多的scaffold命令来处理样板代码。这在开发超越简单CRUD操作的应用程序时很有帮助。

可扩展性

说到可伸缩性,我对这两个框架都很满意。有时您不需要复杂的应用程序体系结构来满足您的需求。

与其花时间在建筑设计上,不如选择整体式建筑。Blitz和Redwood在帮助您开发可扩展应用程序方面脱颖而出。

灵活性

接下来,我们将比较在每个框架内构建自定义逻辑的容易程度。

假设我想添加基本身份验证:

  • 用户必须输入用户名和密码才能在应用程序中注册
  • 然后用户可以使用其凭据登录

当我试图在我的应用程序中实现这一功能时,我在两个框架中都为此寻找了一个预构建的模块,以使我的工作更容易。

Redwood很少提供开箱即用的身份验证机制,而且它仍在积极开发中。

Redwood Auth Playground

Blitz正在积极研究授权会话管理。根据GitHub的说法,它应该很快就会发布。

要使用本地用户名密码实现身份验证,我们需要在客户端使用React Context实现自定义逻辑。

总结

根据我迄今为止的经验,我发现Blitz.js和RedwoodJS在快速构建应用程序方面都非常有用。也就是说,我偏爱Blitz,因为如果我的应用程序不需要,它不会强迫我使用GraphQL。

你更喜欢哪种框架?

本文:【全栈开发】Blitz.js与RedwoodJS | 程序员云开发,云时代的程序员.

欢迎收藏【架构师酒馆】和【开发者开聊】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/193561.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【网安AIGC专题】46篇前沿代码大模型论文、24篇论文阅读笔记汇总

网安AIGC专题 写在最前面一些碎碎念课程简介 0、课程导论1、应用 - 代码生成2、应用 - 漏洞检测3、应用 - 程序修复4、应用 - 生成测试5、应用 - 其他6、模型介绍7、模型增强8、数据集9、模型安全 写在最前面 本文为邹德清教授的《网络安全专题》课堂笔记系列的文章&#xff0c…

nodejs+vue+elementui网上家电家用电器数码商城购物网站 多商家

基于vue.js的恒捷网上家电商城系统根据实际情况分为前后台两部分,前台部分主要是让用户购物使用的,包括用户的注册登录,查看公告,查看和搜索商品信息,根据分类定位不同类型的商品,将喜欢的商品加入购物车&a…

c语言:有关内存函数的模拟实现

memcpy函数&#xff1a; 功能&#xff1a; 复制任意类型的数据&#xff0c;存储到某一数组中。 代码模拟实现功能&#xff1a; #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<string.h> #include <stdio.h> #include<assert.h> memcpy…

初识Spring (Spring 核心与设计思想)

文章目录 什么是 Spring什么是容器什么是 IoC理解 Spring IoCDI 概念 什么是 Spring Spring 官网 官方是这样说的: Spring 让每个人都能更快、更轻松、更安全地进行 Java 编程。春天的 专注于速度、简单性和生产力使其成为全球最受欢迎Java 框架。 我们通常所说的 Spring 指的…

避免手机无节制使用

手机使用情况分析 使用时间 我挑选了11月份某一周的统计数据&#xff0c;可以看到&#xff0c;我的日均手机手机时间达到了惊人的8个小时&#xff0c;每周总共余约57小时。 按照使用软件的类型来分类&#xff0c;其中约%50用于娱乐&#xff0c;主要使用软件为&#xff1a;哔哩…

Mac 搭建本地服务器

文章目录 1 启动服务器2 服务器目录3 手机访问服务器3.1 手机和电脑连上同一个局域网( 或WIFI)3.2 找到电脑的ip地址 如下图所示3.3 手机打开 http://192.168.10.5/1.txt 4 关闭服务器5 参考文章 1 启动服务器 sudo apachectl start启动后访问 http://localhost/ 如下图所示即…

Java第二十章 ——多线程

本文主要讲了java中多线程的使用方法、线程同步、线程数据传递、线程状态及相应的一些线程函数用法、概述等。 在这之前&#xff0c;首先让我们来了解下在操作系统中进程和线程的区别&#xff1a;   进程&#xff1a;每个进程都有独立的代码和数据空间&#xff08;进程上下文…

SQL Server:流程控制语言详解

文章目录 一、批处理、脚本和变量局部变量和全局变量1、局部变量2、全局变量 二、顺序、分支和循环结构语句1、程序注释语句2、BEGIN┅END语句块3、IF┅ELSE语句4、CASE语句5、WHILE语句6、BREAK和CONTINUE语句BREAK语句CONTINUE语句 三、程序返回、屏幕显示等语句1、RETURN语句…

深度学习之图像分类(十五)DINAT: Dilated Neighborhood Attention Transformer详解(一)

Dilated Neighborhood Attention Transformer Abstract Transformers 迅速成为跨模态、领域和任务中应用最广泛的深度学习架构之一。在视觉领域&#xff0c;除了对普通Transformer的持续努力外&#xff0c;分层Transformer也因其性能和易于集成到现有框架中而受到重视。这些模…

CGAN原理讲解与源码

1.CGAN原理 生成器&#xff0c;输入的是c和z&#xff0c;z是随机噪声&#xff0c;c是条件&#xff0c;对应MNIST数据集&#xff0c;要求规定生成数字是几。 输出是生成的虚假图片。 判别器的输入是 1.生成器输出的虚假图片x; 2.对应图片的标签c 来自真实数据集&#xff0c;且…

线性分类器--数据处理

数据集划分 通常按照 70%&#xff0c;20% &#xff0c;10% 来分数据集 数据处理 斯坦福的线性分类器体验 http://vision.stanford.edu/teaching/cs231n-demos/linear-classify/

数据结构-二叉树(1)

1.树概念及结构 1.1树的概念 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;而叶朝下的。 1.有一个特殊的结点&…

【上海大学数字逻辑实验报告】一、基本门电路

一、 实验目的 熟悉TTL中、小规模集成电路的外形、管脚和使用方法&#xff1b;了解和掌握基本逻辑门电路的输入与输出之间的逻辑关系及使用规则。 二、 实验原理 实现基本逻辑运算和常用逻辑运算的单元电路称为逻辑门电路。门电路通常用高电平VH表示逻辑值“1”&#xff0c;…

前端入职环境安装

前端入职 后环境安装 &#xff0c;内函 nodenvmgit微信开发者工具vscode 的安装包 一.node安装-js运行环境 1.node下载&#xff0c;下载地址Node.js 2.配置淘宝镜像 npm config set registry https://registry.npmmirror.com/ 3.查看配置 npm config list 二.nvm安装-切…

什么是高性能计算岗位

最近有小伙伴咨询什么是高性能计算岗位。 1、什么是高性能计算 高性能计算&#xff0c;在很多招聘信息中也会被标注为 HPC&#xff0c;是 High Performance Computing 的缩写。 目前很多 AI 公司或者从事 AI 的部门招聘都有这个岗位需求&#xff0c;我从某聘上截取了几个有代…

面试常见问题:什么是进程? 什么是线程?进程和线程有什么区别?

1.什么是进程&#xff1f; 进程是操作系统中一个程序在执行过程中的一个实例&#xff0c;每个进程都有自己独立的地址空间&#xff0c;进程间不共享内存。它是程序运行的最小内存单元&#xff1b; 进程特点&#xff1a; 1> 需要占用独立的内存空间&#xff1b; 2>可以并…

R语言阶段复习一

创建一个长度为7的字符向量&#xff0c;元素为"A", "B", "C", "D", "E", "F", "G"&#xff0c;并命名为vec1。 创建一个因子&#xff0c;包含6个水果&#xff1a;"apple", "banana"…

Selenium-介绍下其他骚操作

Chrome DevTools 简介 Chrome DevTools 是一组直接内置在基于 Chromium 的浏览器&#xff08;如 Chrome、Opera 和 Microsoft Edge&#xff09;中的工具&#xff0c;用于帮助开发人员调试和研究网站。 借助 Chrome DevTools&#xff0c;开发人员可以更深入地访问网站&#xf…

C语言:一个数如果恰好等于除它本身外的因子之和,这个数就称为完数。例如6=1+2+3。编程找出1000以内的所有完数。

分析&#xff1a; 在主函数 main 中&#xff0c;程序首先定义三个整型变量 m、s 和 i&#xff0c;并用于计算和判断完数。然后使用 printf 函数输出提示信息。 接下来&#xff0c;程序使用 for 循环结构&#xff0c;从 2 到 999 遍历所有的数。对于每个遍历到的数 m&#xff0c…

ESP32-Web-Server编程- JS 基础 3

ESP32-Web-Server编程- JS 基础 3 概述 本示例演示通过 button 控件的 onclick 内联属性&#xff0c;实现在网页上点击按钮&#xff0c;切换 LED 灯图标的转变。 示例解析 前端设计 前端代码建立了一个 id 为 “imageLamp” 的图片对象。并建立两个按钮&#xff0c;设计两…