Java 中的面向数据编程

本文探讨了Java中的面向数据编程,指出在小型程序中,数据建模为不可变数据能带来便利。记录类、封印类和模式匹配的结合支持了面向数据编程,使得数据建模更安全、可读和易于维护。通过记录类建模命令行选项、使用封印类处理复杂返回类型和数据结构,以及将JSON建模为代数数据类型,展示了面向数据编程在Java中的应用。
摘要由CSDN通过智能技术生成

近年来, Amber 项目为 Java 带来了许多新特性—— 局部变量类型推断 、 文本块 、 记录类 、 封印类 、 模式匹配 等等。虽然这些特性都是独立的,但也可以组合在一起使用。具体地说,记录类、封印类和模式匹配组合在一起让 Java 的面向数据编程变得更容易。在本文中,我们将讨论什么是面向数据编程,以及它如何影响 Java 的编程方式。

面向对象编程

任何一种编程范式的目标都是管理复杂性。但复杂性会以多种形式出现,并不是所有的范式都能同等处理好所有形式的复杂性。大多数编程范式都有一个口号:“一切皆……”面向对象编程的口号是“一切皆对象”,函数式编程的口号是“一切皆函数”,基于 Actor 的系统的口号是“一切皆 Actor”等等。(当然,这些都是为了达到某种效果而夸大的说法。)

OOP 鼓励我们使用定义了状态和行为的对象对复杂的实体和过程进行建模。OOP 鼓励封装性(协调对对象状态的访问)和多态性(使用公共接口与多种实体交互),尽管实现这些目标的机制因面向对象编程语言而异。当我们用对象对世界进行建模时,我们被鼓励按照 is-a(储蓄帐户是一个银行帐户)和 has-a(储蓄帐户有一个所有者和账号)的关系来思考问题。

虽然一些开发者大声宣告面向对象编程是一次失败的试验,但事实却很微妙。与其他所有的工具一样,它非常适合用来做一些事情,但也不太适合用来做另一些事情。OOP 做不好的事情可能可以用糟糕来形容,许多人都曾见过被运用得荒谬至极的 OOP 原则。但是,如果我们了解 OOP 的优点和缺点,就可以在它提供更多价值的地方使用它,在它提供较少价值的地方使用其他语言。

OOP 在定义和保持边界方面做得很出色——维护的边界、版本控制的边界、封装的边界、编译的边界、兼容性的边界、安全性的边界,等等。独立维护的库独立于依赖它们的应用程序(以及库彼此之间)而构建、维护和演化,如果我们希望能够自由地从库的一个版本迁移到下一个版本,就需要确保库和它们的客户端之间有清晰的、定义良好的和深思熟虑的边界。平台库可能有访问底层操作系统和硬件的特权,这些权限必须加以小心的控制。我们需要在平台库和应用程序之间建立一个牢固的边界来保持系统的完整性。OO 语言为我们提供了精确定义和保持这些边界的工具。

将一个大程序划分为具有明确边界的部分,有助于我们管理复杂性,因为它支持模块化推理——一次只分析程序的一部分,但仍然具备对整个程序进行推理的能力。对于单体程序来说,设置合理的内部边界有助于我们构建跨多个团队的更大的应用程序。Java 在单体时代兴盛并非偶然。

从那时起,程序变得越来越小,我们不再构建大单体,而是将许多较小的服务组合成较大的应用程序。在小型服务中,对内部边界的需求较少,足够小的服务可以由单个团队(甚

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值