【全栈开发】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 | 程序员云开发,云时代的程序员.

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

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

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

相关文章

航天宏图——宏图1号样例数据0.5米-5米分辨率(上海部分)

简介: 作为航天宏图“女娲星座”建设计划的首发卫星,航天宏图-1号可获取0.5米-5米的分辨率影像,具备高精度地形测绘、高精度形变检测、高分辨率宽幅成像以及三维立体成像等能力,在自然资源、应急管理、水利等行业与领域具有极高的…

Spring底层篇

一、什么是Spring?谈谈你对IOC和AOP的理解。 Spring: 是一个企业级java应用框架,他的作用主要是简化软件的开发以及配置过程,简化项目部署环境。 Spring的有点: 1、Spring低侵入设计,对业务代码的污染非…

python游戏开发pygame初步

文章目录 安装和示例移动物体优化 安装和示例 顾名思义,PyGame就是用来做游戏的Python库,提供了许多游戏开发功能,如图像处理、音频播放、事件处理、碰撞检测等等。从这个角度来说,pygame不仅是一个游戏库,同时也是一…

卷积,是什么?

其实就是对事物的作用,或者说作用力,比如说,石板上没有字,我们刻上字,便于识别,从机器视觉角度来说,就是对图像的作用力,这种作用使得能看清想要的东西,感觉还是很主观&a…

Redis面试题:redis做为缓存,mysql的数据如何与redis进行同步呢?(双写一致性)

目录 强一致性:延迟双删,读写锁。 弱一致性:使用MQ或者canal实现异步通知 面试官:redis做为缓存,mysql的数据如何与redis进行同步呢?(双写一致性) 候选人:嗯&#xff…

为什么淘宝取消双12活动?

我是卢松松,点点上面的头像,欢迎关注我哦! 淘宝取消双12活动了,这条消息犹如一颗重磅炸弹,在整个电商圈中引发了轩然大波。 不过呢,淘宝为了过度,把双12改了个名字叫“好价节”。估计是官方都…

使用skforecast进行时间序列预测

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

栈详解(C语言)

文章目录 写在前面1 栈的定义2 栈的初始化3 数据入栈4 数据出栈5 获取栈顶元素6 获取栈元素个数7 判断栈是否为空8 栈的销毁 写在前面 本片文章详细介绍了另外两种存储逻辑关系为 “一对一” 的数据结构——栈和队列中的栈,并使用C语言实现了数组栈。 栈C语言实现源…

Vue3中Composition API介绍

在Vue 3中,引入了Composition API,它是一种新的组合式函数API,用于更灵活地组织和重用组件逻辑。Composition API相比于Vue 2中的Options API,提供了更好的可组合性和代码复用性。下面是对Vue 3中Composition API的介绍和用法&…

【自主探索】基于 rrt_exploration 的单个机器人自主探索建图

文章目录 一、rrt_exploration 介绍1、原理2、主要思想3、拟解决的问题4、优缺点 二、安装环境三、安装与运行1、安装2、运行 四、配置说明1、Robots Network2、Robots frame names in tf3、Robots node and topic names4、Setting up the navigation stack on the robots5、A …

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

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

C#,《小白学程序》第十九课:随机数(Random)第六,随机生成任意长度的大数(BigInteger)

1 文本格式 using System; using System.Linq; using System.Text; using System.Collections.Generic; /// <summary> /// 大数的&#xff08;加减乘除&#xff09;四则运算、阶乘运算 /// 乘法计算包括小学生算法、Karatsuba和Toom-Cook3算法 /// 除法运算为 Truffer…

车载以太网-ICMP

文章目录 ICMP协议ICMP报文格式ICMP报文的示例ICMP协议流程ICMP协议报文示例车载以太网ICMP协议测试内容ICMP协议 车载以太网(Ethernet)是一种用于在车辆内部传输数据的网络协议。Internet控制消息协议(ICMP)是一种用于在IP网络上发送错误消息和操作消息的协议。在车载以太…

Leetcode—167.两数之和 II - 输入有序数组【中等】

2023每日刷题&#xff08;四十一&#xff09; Leetcode—167.两数之和 II - 输入有序数组 实现代码 /*** Note: The returned array must be malloced, assume caller calls free().*/ int* twoSum(int* numbers, int numbersSize, int target, int* returnSize) {*returnSiz…

Java多线程-面试题+答案——第6期

当准备Java多线程面试时&#xff0c;更多的问题可能涉及到线程池、并发集合、并发工具、锁、原子操作等更深层次的概念。 Java中的CountDownLatch和CyclicBarrier的区别&#xff1a; 答案&#xff1a; CountDownLatch用于等待多个线程完成某个任务&#xff0c;计数器递减到零…

小程序中的大道理之四--单元测试

在讨论领域模型之前, 先继续说下关于测试方面的内容, 前面为了集中讨论相应主题而对此作了推迟, 下面先补上关于测试方面的. 测试覆盖(Coverage) 先回到之前的一些步骤上, 假设我们现在写好了 getPattern 方法, 而 getLineContent 还处于 TODO 状态, 如下: public String ge…

网络视频播放卡顿原因分析

一、问题描述 某项目通过拉摄像机rtsp流转rtmp/http-flv/ws-flv的方案&#xff0c;使用户可以在网页中观看摄像机的视频画面。在 观看视频时偶发出现卡顿现象。 二、卡顿现象分析和解决 此问题涉及的原因较多&#xff0c;所以得考虑各环节的问题可能性&#xff0c;并根据现场实…

Apache多后缀解析漏洞分析

漏洞介绍 该漏洞与用户的配置有密切的关系,严格来说属于用户配置问题。Apache文件解析漏洞涉及到 Apache 解析文件的特性。在默认情况下,Apache 允许一个文件具有多个以点分割的后缀,在处理文件时会从右向左识别后缀名。(就是右边的后缀名无法识别,则继续识别左边的) 如果…

C#与C++进行字段内存对齐

通过预留字段来补齐内存分配。在实际项目中采用这种方法较多&#xff0c;即保证了长度一致&#xff0c;也为以后的扩展提供了容错的可能性。 unsafe struct StructSequential{public fixed float x[8];public fixed float y[8];public fixed float z[8];public fixed float ti…

在CentOS 7.9上搭建高性能的FastDFS+Nginx文件服务器集群并实现外部远程访问

文章目录 引言第一部分&#xff1a;FastDFS介绍与安装1.1 FastDFS简介1.2 FastDFS安装1.2.1 安装Tracker Server1.2.2 安装Storage Server 1.3 FastDFS配置1.3.1 配置Tracker Server1.3.2 配置Storage Server1.3.3 启动FastDFS服务 第二部分&#xff1a;Nginx配置2.1 Nginx安装…