首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

还在重复写空指针检查代码?考虑使用 Optional 吧!

这个异常潜伏在代码中,就像个遥控炸弹,不知道什么时候这个按钮会被突然按下(传入 null 对象)。 还记得刚入行程序员时候,三天两头碰到空指针异常引发 Bug,解决完一个,又在另一处碰到。...=null){ // do something } 有了这个防御之后,虽然不用再担心空指针异常,但是过多判断语句使得代码变得臃肿。....; staff.getDepartment().getCompany().getName(); 但是很不幸,为了代码安全性,我们不得不加入空指针判断代码。...示例代码如下: Optional optCompany = Optional.ofNullable(company); // 与直接使用指针判断没有任何区别...Department#getCompany返回对象为 Optional 03、代码重构 上面我们学习了 Optional 类主要 API ,下面我们使用 Optional 重构文章刚开头代码

1.3K20

还在重复写空指针检查代码?考虑使用 Optional 吧!

这个异常潜伏在代码中,就像个遥控炸弹,不知道什么时候这个按钮会被突然按下(传入 null 对象)。 还记得刚入行程序员时候,三天两头碰到空指针异常引发 Bug,解决完一个,又在另一处碰到。...=null){ // do something } 有了这个防御之后,虽然不用再担心空指针异常,但是过多判断语句使得代码变得臃肿。....; staff.getDepartment().getCompany().getName(); 但是很不幸,为了代码安全性,我们不得不加入空指针判断代码。...示例代码如下: Optional optCompany = Optional.ofNullable(company); // 与直接使用指针判断没有任何区别...Department#getCompany返回对象为 Optional 03、代码重构 上面我们学习了 Optional 类主要 API ,下面我们使用 Optional 重构文章刚开头代码

1K40
您找到你想要的搜索结果了吗?
是的
没有找到

还在重复写空指针检查代码?考虑使用 Optional 吧!

这个异常潜伏在代码中,就像个遥控炸弹,不知道什么时候这个按钮会被突然按下(传入 null 对象)。 还记得刚入行程序员时候,三天两头碰到空指针异常引发 Bug,解决完一个,又在另一处碰到。...=null){ // do something } 有了这个防御之后,虽然不用再担心空指针异常,但是过多判断语句使得代码变得臃肿。 假设我们存在如下对象关系 ?....; staff.getDepartment().getCompany().getName(); 但是很不幸,为了代码安全性,我们不得不加入空指针判断代码。...示例代码如下: Optional optCompany = Optional.ofNullable(company); // 与直接使用指针判断没有任何区别 if (optCompany.isPresent...Department#getCompany返回对象为 Optional 三、代码重构 上面我们学习了 Optional 类主要 API ,下面我们使用 Optional 重构文章刚开头代码

59040

避免在 TypeScript 代码使用模糊 Object 或 {}

避免 TypeScript 代码使用模糊 Object 或 {}在 TypeScript 世界里,当我们期望一个对象但不确定对象具体结构时,通常会使用 Object 或 {} 作为类型。...让我们深入探讨一下,看看为什么在 TypeScript 代码使用这些模糊类型可能是时候慎重考虑了。...理解使用 Object 或 {} 问题当我们有一个 TypeScript 变量存储任何对象,但对对象结构不确定时,我们经常使用 Object 或 {} 这样类型,如下所示:type Param =...通过寻找替代方案,我们可以为更加平稳、可预测代码铺平道路。解决方案1:使用 Record我们可以在 TypeScript 中使用 Record 来解决这个问题。...,我们可以使用任何其他术语,比如 key、property、id 等,例如:type Param = { [key: string]: unknown };现在让我们看看如果在我们示例代码使用 index

11600

混搭 TypeScript + GraphQL + DI + Decorator 风格写 Node.js 应用

GraphQL 理解成本和接入成本还是有一些,建议直接通读官方文档 《GraphQL 入门》 去了解 GraphQL概念和使用。...服务端 Web 中间件,支持 Koa 也就天然支持了 Midway TypeGraphQL:它通过一些 TypeScript + Decorator 规范了 Schema 定义,避免GraphQL...案例:利用 GraphQL 实现分页功能 5.1 分页数据结构 从使用者角度来,我们希望传递参数只有两个 pageNo 和 pageSize ,比如我想访问第 2 页、每页返回 10 条内容,入参格式就是...如果想表示数组或元素都有可能为空时,需要使用 {nullable: "itemsAndList"}(即 [Item]) 5.3 Resolver 方法 基于上述 Schema 定义,接下来我们要写 Resolver...数据库连接)、 type-graphqlGraphQL处理)工具库来使用,整体代码风格更加简洁,同样业务功能,代码量减少非常可观且维护性也提升明显。

3.2K20

造轮子之集成GraphQL

每个请求通常返回一个固定数据结构,包含在响应主体中。 GraphQL:客户端可以使用GraphQL查询语言来精确指定需要数据。...GraphQLGraphQL中没有显式版本控制机制,而是通过向现有的类型和字段添加新字段来扩展现有的API。这样可以避免创建多个不同版本API。...GraphQL:客户端可以使用GraphQL强类型系统和自动生成代码工具来进行开发。客户端可以根据GraphQL模式自动生成类型定义和查询代码,提供了更好开发体验和类型安全性。...分页查询,添加一下User分页查询代码。...只不过一些排序分页逻辑我们没有采用GraphQL方式,而是使用我们自己WebApi分页查询模式。

21110

GraphQL—构建多服务架构数据层

简介 作为 Facebook 在 2015 年推出查询语言,GraphQL 能够对 API 中数据提供一套易于理解完整描述,使得客户端能够更加准确获得它需要数据 现在web系统大多是基于restful...Relay规范 GraphQL有自己规范定义,用于制定一些通用规则,称为Relay: 提供能够重新获取对象机制; 提供对如何对连接进行分页描述; 标准化 mutation 请求,使它们变得更加可预测...它描述了连接到它客户端应用程序可用功能。我们可以使用任何编程语言来创建 GraphQL Schema 并围绕它构建一个接口。...避免了返回结果中不必要数据字段。...这样不论是维护还是使用上都很难进行下去,而且与现在主流微服务架构体系相矛盾 业界目前最主流解决方案是 Apollo GraphQL 提供 GraphQL Federation 功能,并且 Netflix

21010

MassCMS With APIJSON最佳实践

APIJSON支持查询、过滤、排序、分页等操作,使用简单直观。使用自定义查询语言,使用HTTP或WebSocket进行查询。客户端可以发送一个查询请求,服务器会根据请求返回与查询匹配数据。...使用字段选择集来指定要返回字段,可以避免不必要数据传输,提高了网络效率。数据关系和嵌套支持在请求中使用嵌套JSON结构来获取多层次数据关系。...GraphQL使用一种类似于查询语言方式来请求数据,语法略复杂一些。灵活性APIJSON具有较高灵活性,可以根据前端需求灵活地定制返回数据结构,避免了传统过度或不足数据传递问题。...GraphQL可以通过限制查询能力和使用权限认证来提供安全性,但需要手动实现和配置。...接口调用需要鉴权,使用 AES 加密,示例代码如下,具体参考示例代码中/utils/auth.js 文件中详细代码.export function getCallsSide() { let callsside

42120

面对极度复杂前后端业务场景,使用 GraphQL 正确姿势

前端Fragment是基于对象,左边第一段代码就是一个基于Employee对象employee Fragment,我们可以从中获取到id、gende、name等数据。...其次是开发feature时要更多考虑性能问题,避免被查宕机。另外GraphQL相比Restful在鉴权模型设计上要投入更多精力。 说完了这些弊端,再来看下有那些有利地方。...一是接口开发工作量大幅减少,重复性工作得以减少,避免了出错。其次是错误返回和文档等标准化工作可以借助工具本身完成。最后是对API多版本管理更加友好。...第三点是没有做分页数目限制,一般来说前端可以通过传递特定参数给接口来设置每页接收数量,但是有些前端人员可能会为了快速上线新功能将每页数量直接设置为9999,这样服务器就又会被搞宕机。...请求频率限制上既要防止恶意刷请求也要实现基于IP和UserID限制。 安装工人心得 这里标题是安装工人心得,其实指就是我个人在使用GraphQL过程一些感悟和总结。

7.3K20

Spring Boot GraphQL 实战 03_分页、全局异常处理和异步加载

hello,大叫好,我是小黑,又和大家见面啦~ 今天我们来继续学习 Spring Boot GraphQL 实战,我们使用框架是 https://github.com/graphql-java-kickstart.../graphql-spring-boot 本期,我们将使用 H2 和 Spring Data JPA 来构建数据库和简单查询,不熟悉同学可以自行去网上查阅相关资料学习。...完整项目 github 地址:https://github.com/shenjianeng/graphql-spring-boot-example 分页查询 基于偏移量分页 基于偏移量分页,即通过...传统分页 基于游标的分页 基于游标的分页,即通过游标来跟踪数据获取位置。 游标的选取有时候可以非常简单,例如可以将所获得数据最后一个对象 ID 作为游标。...我们当前使用 graphql-spring-boot 框架支不支持全局异常处理呢?

2.1K10

GraphQL 在微服务架构中实践

连接与分页 在一个常见数据库中,一对多关系是非常常见,一个 User 可以同时拥有多个 Post 以及多个 Comment,这些资源数量在理论上不是有穷,没有办法在同一个请求全部返回,所以要对这部分资源进行分页...是一个不透明指针,拿到当前 cursor 后就可以将它作为 after 参数传到下一个查询中: ?...GraphQL 作为一种更灵活 API 服务提供方式,相比于传统 Web 服务更容易出现上述问题,类似的问题在出现时也可能更加严重,所以我们更需要避免 N + 1 问题发生。...前缀 如何解决冲突资源从目前来看有两种不同方式,一种是为多个服务提供资源添加命名空间,一般来说就是前缀,在合并 Schema 时,通过添加前缀能够避免不同服务出现重复字段造成冲突可能。 ?...GraphiQL,并可以通过代码生成文档,节约文档维护成本和沟通成本; 不得不说 GraphQL 作为一门新兴技术有着非常多优点,很多公司都在尝试使用 GraphQL 对外提供 API,虽然目前来说这门技术不算特别成熟

1.5K10

GraphQL 在微服务架构中实践

cursor 就是我们用来做分页字段,所有的 cursor 其实都是 Base64 编码字符串,这能够提醒调用方 cursor 是一个不透明指针,拿到当前 cursor 后就可以将它作为 after...前缀 如何解决冲突资源从目前来看有两种不同方式,一种是为多个服务提供资源添加命名空间,一般来说就是前缀,在合并 Schema 时,通过添加前缀能够避免不同服务出现重复字段造成冲突可能。 ?...GraphiQL,并可以通过代码生成文档,节约文档维护成本和沟通成本; 不得不说 GraphQL 作为一门新兴技术有着非常多优点,很多公司都在尝试使用 GraphQL 对外提供 API,虽然目前来说这门技术不算特别成熟...cursor 就是我们用来做分页字段,所有的 cursor 其实都是 Base64 编码字符串,这能够提醒调用方 cursor 是一个不透明指针,拿到当前 cursor 后就可以将它作为 after...前缀 如何解决冲突资源从目前来看有两种不同方式,一种是为多个服务提供资源添加命名空间,一般来说就是前缀,在合并 Schema 时,通过添加前缀能够避免不同服务出现重复字段造成冲突可能。 ?

2.6K20

为什么我使用 GraphQL 而放弃 REST API?

分页和过滤并不简单 大多数 API 都使用对象集合。在待办事项列表应用中,列表本身就是一个集合。大多数集合都可以包含 100 多个项。...如果有的话,最好使用代码生成,但是它似乎不够灵活。即使是使用像 Moya 这样辅助库,也会遇到同样障碍:有许多自定义行为需要处理,这是由前面提到边缘情况引起。...此模式中其他变体和查询也是如此:对输入进行类型检查和验证,并且基于查询,GraphQL 服务器知道期望结果形状。...有很多流行开源项目都在使用 GraphQL:这个博客是基于静态站点生成器 Gatsby,它将 GraphQL 查询结果转换成数据,然后呈现到 HTML 文件中。...如果你使用是 WordPress,也有 GraphQL API 可以使用。Reaction Commerce 是 Shopify 开源替代方案,同样是基于 GraphQL

2.3K30

推荐 11 个 GitHub 上比较热门 Java 项目

它是一款基于图形界面的Java反编译器,Java字节码编辑器,APK编辑器,Dex编辑器,APK反编译器,DEX反编译器。 不仅如此,它还是一款Hex查看器,代码搜索器和代码调试器。...它能够被任意项目的构建系统所使用。...SmartTable 是一套数据源使用 Ajax 获取数据,并展现成表格与图像形式,并且支持下载(思路源于talkingdata)智能表格。...schema,具有以下功能: ● 从微服务创建统一GraphQL模式 ● 可灵活定义GraphQL模式并组成共享组件 ● 从Proto定义生成GraphQL类型 ● 基于GraphQL查询参数填充请求...Proto ● 提供一个DSL来修改生成模式 ● 通过注释获取数据方法来加入数据源 ● 基于GraphQL选择器创建Proto FieldMasks 8 zheng https://github.com

1K20

【小家java】java8新特性之---Optional使用避免指针,代替三目运算符

宁交一个抬杠鬼,也不交一个嘴甜贼 空指针异常是导致Java应用程序失败最常见原因。...以前,为了解决空指针异常,Google公司著名Guava项目引入了Optional类,Guava通过使用检查空值方式来防止代码污染,它鼓励程序员写更干净代码。...但是当里面的值为null时,我们发现orElse里面代码还是执行,但是orElseGet里面就不会执行啦。...所以使用起来是不是逼格高一点 orElseThrow(判空等场景特别有用) 如下代码,一句话搞定 Date startTime = new Date(Optional.of(req.getFromTime...,还可以使用map映射: public static void main(String[] args) { //此处会直接抛出空指针异常 //Optional<String

2.5K30

GraphQL实践7——Netflix Dgs Graphql分页查询

问题背景上一篇文章提到,使用List查询每次都返回全量数据,而实际场景更多使用分页查询,graphql-java提供Connection实现游标分页,在Dgs也有对应功能扩展Relay Pagination...graphql-dgs-pagination        Mybatis Plus 配置分页插件@Configuration...@MapperScan("top.fjy8018.graphsqldemo.mapper")public class MybatisPlusConfig {    /**     * 分页插件配置    ...,DSG核心功能尝试基本完成,基本实现常用Rest功能,同时集成方便,而且官方文档清晰,但目前开源社区还没有太多基于DSG系统集成样例,还需要在实践中评估摸索。...thoughtworks也从2016年开始关注graphql,目前给出建议也是“评估”,可以进行小规模尝试并在合适时候推广We've seen many successful GraphQL implementations

1.9K20
领券