【全栈开发】Blitz.js与RedwoodJS

news2024/11/29 12:51:25

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

在本指南中,我们将分析两个帮助全栈应用程序世界的开发人员实现这些目标的框架: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 | 程序员云开发,云时代的程序员.

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023年3月电子学会青少年软件编程 Python编程等级考试一级真题解析(判断题)

2023年3月Python编程等级考试一级真题解析 判断题(共10题,每题2分,共20分) 26、在Python编程中,print的功能是将print()小括号的内容输出到控制台,比如:在Python Shell中输入print(北京,你好)指令,小括号内容可以输出到控制台 答案:错 考点分析:考查python中print…

Proteus仿真--基于PG12864LCD设计的指针式电子钟

本文介绍基于PG12864LCD设计的指针式电子钟(完整仿真源文件及代码见文末链接) 仿真图如下 本设计中时间芯片选用DS1302芯片,液晶选用PG12864LCD模块,按键K1-K3,K1用于时分选择,K2用于调整功能&#xff0c…

积跬步至千里 || 为循环添加进度条

有时候,我们的Python程序需要运行较长时间,原因是一些环节占用时间太长(如for循环)。如果我们要观察那些占用时间任务的执行进度,那么有一个进度条能实时的显示任务进度情况的话,将会非常方便。而tqdm库就是…

Docker容器化部署若依微服务ruoyi-cloud项目

系统环境 接下来的内容以 Ubuntu 22.04.1 操作系统为例。 下载安装Docker Ubuntu hihi-IdeaCentre-GeekPro-15ICK:~$ sudo su [sudo] hi 的密码: roothi-IdeaCentre-GeekPro-15ICK:/home/hi# docker ps 找不到命令 “docker”,但可以通过以下软件包安…

JDK、JRE、JVM的特点和关联

Java 的三个重要的概念是 JDK(Java Development Kit)、JRE(Java Runtime Environment)和 JVM(Java Virtual Machine)。它们之间有着密切的关联,同时又有不同的职责和特点。 JDK(Java…

使用skforecast进行时间序列预测

时间序列预测是数据科学和商业分析中基于历史数据预测未来价值的一项重要技术。它有着广泛的应用,从需求规划、销售预测到计量经济分析。由于Python的多功能性和专业库的可用性,它已经成为一种流行的预测编程语言。其中一个为时间序列预测任务量身定制的…

【数据库】执行计划中二元操作对一趟扫描算法的应用,理解代价评估的应用和优化,除了磁盘代价还有CPU计算代价不容忽略

二元操作的一趟算法 ​专栏内容: 手写数据库toadb 本专栏主要介绍如何从零开发,开发的步骤,以及开发过程中的涉及的原理,遇到的问题等,让大家能跟上并且可以一起开发,让每个需要的人成为参与者。 本专栏会定…

makefile项目构建

makefile项目构建 OVERVIEW makefile项目构建1.概念2.make选项3.makefile语法(1)基本语法(2)系统与自定变量(3)常用函数(4)模式匹配与伪目标 4.makefile编译流程(1&#…

机器学习---贝叶斯网络与朴素贝叶斯

1. 贝叶斯法则 如何判定一个人是好人还是坏人? 当你无法准确的熟悉一个事物的本质时,你可以依靠与事物特定本质相关的事件出现的次数来判断 其本质属性的概率。如果你看到一个人总是做一些好事,那这个人就越可能是一个好人。 数学语言表达…

C# APS.NET CORE 6.0 WEB API IIS部署

1.创建 APS.NET CORE6.0 WEB API项目 默认选项即可 源代码: 项目文件展开: launchSettings.json {"$schema": "https://json.schemastore.org/launchsettings.json","iisSettings": {"windowsAuthentication"…

记录华为云服务器(Linux 可视化 宝塔面板)-- Nginx篇

文章目录 配置Nginx服务器1、添加CentOS 7系统的Nginx yum资源库2、安装Nignx服务 设置Nginx安全级别(感觉可以先不设置)步骤一步骤二如有启发,可点赞收藏哟~ 配置Nginx服务器 1、添加CentOS 7系统的Nginx yum资源库 先安装rpm apt instal…

Linux 中的 ls 命令使用教程

目录 前言 如何运用 ls 命令 1、列出带有所有权的文件和目录 2、获取以人类可读的方式显示的信息 3、列出隐藏文件 4、递归列出文件 5、在使用 ls 时对文件和目录做区分 6、列出指定扩展名的文件 7、基于大小对输出内容排序 8、根据日期和时间排序文件 让我们来总结…

Nginx:配置文件详解

一、Nginx配置文件 main配置段:全局配置 events段:定义event工作模式 http {}:定义http协议配置 支持使用变量: 内置变量:模块会提供内建变脸定义 自定义变量:set var_name value 二、 主…

动态规划学习——斐波那契数列

目录 最长的斐波那契数列子序列的长度 1.题目 2.题目接口 3.解题思路及其代码 最长的斐波那契数列子序列的长度 1.题目 如果序列x_1&#xff0c;X_2&#xff0c;...&#xff0c;x_n 满足下列条件&#xff0c;就说它是斐波那契式的: 1.n > 3 2.对于所有i2 <n&a…

中间件介绍

一、中间件介绍 官方的说法&#xff1a;中间件是一个用来处理Django的请求和响应的框架级别的钩子。它是一个轻量、低级别的插件系统&#xff0c;用于在全局范围内改变Django的输入和输出。每个中间件组件都负责做一些特定的功能。 但是由于其影响的是全局&#xff0c;所以需…

HashMap的实现原;HashMap的工作原理;HashMap存储结构; HashMap 构造函数

文章目录 说一下HashMap的实现原理(非常重要)①HashMap的工作原理HashMap存储结构常用的变量HashMap 构造函数tableSizeFor() put()方法详解hash()计算原理resize() 扩容机制get()方法为什么HashMap链表会形成死循环 HashMap是我们在工作中使用到存储数据特别频繁的数据结构&am…

韵达快递查询,韵达快递单号查询,一键筛选出单号中的退回件

批量查询韵达快递单号的物流信息&#xff0c;并将其中的退回件一键筛选出来。 所需工具&#xff1a; 一个【快递批量查询高手】软件 韵达快递单号若干 操作步骤&#xff1a; 步骤1&#xff1a;运行【快递批量查询高手】软件&#xff0c;第一次使用的朋友记得先注册&#xff…

短期的规划

大方向&#xff1a; 学习编程的前期 大二上学期&#xff1a; 前期追求知识点的广度&#xff1a; 对各类数据结构的了解 熟悉数据库的各类操作&#xff0c;JDBC熟练使用 与此同时&#xff0c;提高写作能力&#xff0c;学习沉淀&#xff0c;提高技术影响力 大二的寒假&…

Java中的异常语法知识居然这么好玩!后悔没有早点学习

学习异常后&#xff0c;发现异常的知识是多么的吸引人&#xff01;不仅可以用来标记错误&#xff0c;还可以自己定义一个异常&#xff0c;用来实现自己想完成的业务逻辑&#xff0c;接下来一起去学习吧 目录 一、异常的概念及体系结构 1.异常的概念 2.异常的体系结构 3.异常…

文章解读与仿真程序复现思路——电网技术EI\CSCD\北大核心《前景导向的主动配电网智能储能软开关规划方法》

这个标题涉及到电力系统中的主动配电网&#xff08;Active Distribution Network&#xff09;以及与之相关的智能储能软开关的规划方法。下面是对标题中各个关键词的解释&#xff1a; 前景导向的&#xff08;Future-oriented&#xff09;&#xff1a; 这表明该方法是以未来发展…