面向数据编程是介绍面向数据范式的独一无二的指南。这种开创性的方法用通用的不可变数据结构表示数据。它简化了状态管理,简化了并发性,并消除了在面向对象代码中会发现的常见问题。这本书通过对话、代码片段和图表展示了强大的新思想,帮助您快速了解关于DOP的伟大之处。最重要的是,该范例与语言无关,您将学习编写可以用JavaScript、Ruby、Python、Clojure实现的DOP代码,也可以用传统的OO语言(如Java或c#)实现。
https://www.manning.com/books/data-oriented-programming
面向数据的编程是为了帮助开发人员降低他们构建的系统的复杂性而编写的。本书中的思想主要适用于操作信息的系统,如前端应用程序、后端Web服务器或Web服务。
这本书讲述了一个故事,说明了面向数据编程(DOP)的价值,以及如何在现实生产系统中应用它的原则。我的建议是跟着故事走,按顺序读各个章节。然而,如果有些章节比其他章节更能激发你的好奇心,请注意,第一部分和第7部分的材料是需要理解第二和第三部分的。在本书中,我们使用Lodash (https://lodash.com/)来说明如何使用泛型函数操作数据。如果您正在阅读的代码片段使用的是您不熟悉的Lodash函数,您可以参考附录D来理解函数的行为。第1部分,灵活性,包含六个章节,重点介绍了传统面向对象编程(OOP)的挑战,并将面向数据编程(DOP)放在中心位置,揭示了如何使用DOP的基本原则来构建灵活的系统。这些章节是这样排列的:
在第一章“面向对象编程的复杂性”中,我们将讨论面向对象编程的复杂性。然后,我们的DOP传奇开始了!听一听高级开发人员Theo和他前途无量的同事Dave之间的对话。对Theo与OOP的复杂性作斗争感到同情,并发现尝试不同编程范式的一个极好的理由。
第二章,代码和数据的分离,我们的朋友Theo正在寻找一种解决方案,可以降低系统的复杂性,增加系统的灵活性。他的工作有危险。Joe是一位经验丰富的开发人员,他有一个答案——dop。了解DOP原则#1如何帮助降低信息系统的复杂性。
第三章,基本数据操作,探讨了如何通过应用DOP原则#2,将数据从类刚性的封装中解放出来,并使用泛型函数自由地操作它。Vive la革命!
第四章,状态管理,通过多版本方法探索状态管理,通过将系统恢复到以前的状态,让我们回到过去,因为在DOP中,状态只是数据。时间旅行是真实存在的!
第五章,基本并发控制,通过应用乐观并发控制策略,帮助我们在并发系统中获得高的读写吞吐量。不需要玫瑰色的眼镜!
第六章,单元测试,提供了一杯咖啡…与乔!我们的朋友Joe证明了面向数据的代码单元测试非常简单,你可以在咖啡店里完成它。喝杯茶,了解一下为什么它如此简单——即使是突变!当你和Joe一起写DOP单元测试的时候。它很酷豆!
第2部分 (可扩展性)演示了如何大规模构建DOP系统,重点关注数据验证、多线程环境、大型数据集合、数据库访问和web服务。需要超大的系统?没问题!
第7章,基本数据验证,教我们如何确保数据进出我们的系统是有效的,只是以防万一…因为,正如Joe所说,您不必在DOP中强制验证数据,但是在需要时可以验证。验证还是不验证,这是一个问题!
第8章,高级并发控制,在我们的朋友Joe分解原子机制的实现细节之后,我们将学习如何在不使用任何锁的情况下以线程安全的方式管理整个系统状态。你根本不知道从原子到原子的复杂性!
第9章,持久数据结构,转移到一个更学术的环境,我们的朋友Joe揭示了一个更安全、更可伸缩的方式来保持数据不变性的内部细节,以及如何有效地实现它,无论数据大小。现在开始上课!
第10章,数据库操作,教我们如何表示、访问和操作数据库中的数据,并提供额外的灵活性,你猜对了!表示“不”的复杂性。第11章,Web服务,让我们发现与Web服务通信的简单性。我们会学到乔说的“我们应该像构建外部那样构建系统的内部”是什么意思。
第3部分,可维护性,介绍高级数据验证、多态、有效代码和调试技术的DOP技术,这些技术在团队中工作时非常重要。欢迎加入我们的团队!
第12章,高级数据验证,允许我们发现未来事物的形状。在这里,您将学习如何在数据在系统内部流动时验证数据,通过定义函数参数和返回值的预期形状,从而简化开发。
第13章,多态性,带我们和Theo和Dave一起上了一节乡下的课——一个适合与动物玩耍的地方,并通过多重方法学习没有对象的多态性。
第十四章,高级数据操作,让我们看到Dave和Theo如何应用Joe的明智建议,在他们创建自己的数据操作工具时,将乏味的代码变成有说服力的代码。本末倒置。“——又是乔送的宝石!”
第十五章,调试,把Dave和Theo带到博物馆最后一次“欢呼”,因为他们创造了一个创新的解决方案来重现和修复错误。