介绍
TypeScript是可以扩展的JavaScript。一种旨在实现复杂用例的语言。它允许用类型来编写JavaScript,这些类型在编译时被检查和删除。这种类型的安全允许更容易编写和维护复杂的应用程序。除其他外,这也是使TypeScript如此受欢迎的原因。
TypeScript是可以扩展的Javascript。一种旨在编写复杂代码的语言。它允许用类型来编写JavaScript,这些类型在编译时被检查和删除。这往往导致TypeScript代码在编译后看起来像普通的JavaScript代码。除其他外,这也是使TypeScript如此受欢迎的原因。它可以在开发过程中(但最迟在编译过程中)比纯JavaScript更快、更容易地发现错误,并与JavaScript一起工作,而不是反对它。一个用TypeScript编写的框架,旨在用TypeScript开发非常复杂的软件。它将许多从企业中已知的设计模式带到了TypeScript,并引入了只有TypeScript的新类型系统才能实现的全新功能,以提高开发速度,尤其是在团队中。小型应用程序也可以从这种新方法中受益,因为Deepkit为非常常见的使用情况配备了许多库,可以单独或组合使用。该框架本身被设计成尽可能的敏捷,并在必要的情况下尽可能的复杂,这不仅是为了快速获得初步的结果,也是为了长期保持开发速度。
JavaScript现在是世界上最大的开发者社区,它为开发者提供了相应的大量选择,包括许多库和工具,以满足项目的需要。然而,要找到合适的图书馆并不总是那么容易。通常情况下,这些库的理念、API和代码质量差别很大,以至于开发人员必须引入大量的粘性代码和额外的抽象,以使这些库能够相互正常工作。近几十年来,制造商或社区将几乎每个项目都需要的核心功能放在漂亮的抽象化的库中,并将其汇集到一个框架中,这已经一次又一次地证明了自己。Java Spring、PHP Symfony/Laravel和C++ QT只是其中几个著名的成功例子。 这些框架通常为开发者提供广泛使用的、已有几十年历史的概念,这些概念以库或组件的形式实现,这样就可以根据需要方便地相互协调使用。所提供的功能和设计模式不是立方体,而是基于有时是几十年前的概念,并在与其他想法的竞争中证明了自己。
JavaScript在这些年里取得了巨大的进步,因此与此同时,越来越多来自企业环境的设计模式可以被应用。在越来越多的库、框架和工具中可以找到的设计模式。然而,JavaScript和TypeScript有一个问题,即为了有效地应用许多已被证实的企业模式,语言本身缺少决定性的功能。这并不意味着这些设计模式不能被普遍应用,而是说它们的效率不如当前的其他语言。
TypeScript在编译过程中完全删除了其类型信息,只要TypeScript被转换为JavaScript,那么在生成的JavaScript中或运行时就不存在任何相关信息。不可否认,在开发过程中和检查程序的正确性时,类型是非常有价值的。然而,类型在运行时也有巨大的价值。在数据在运行时被转换/序列化、数据被验证、元信息被添加到对象或需要接口信息的情况下,这个值会被反映出来。在这些和其他许多用例中,类型信息在运行时可能非常有用,因为它为库提供了必要的信息以有效地提供功能。目前,许多这些用例反而使用了不完全模仿TypeScript类型系统的替代品,并迫使开发者以一种与TypeScript语法无关的新方式来编写类型。其结果是,TypeScript强大的类型系统在这里不能再发挥其优势,而必须使用不那么符合人体工程学、效率较低的工作方式。
Deepkit框架
Deepkit开发了一种类型编译器,将类型信息留在原地,允许在运行时计算动态类型,并在运行时读取现有类型信息。随着这种模式的转变,全新的工作方式成为可能,为上述用例提供了所需的信息,从根本上简化了复杂软件的开发,并赋予代码更多的表现力。第一次有可能在运行时使用TypeScript的全部功能和表现力。
基于这种范式的转变,Deepkit为几乎所有程序中都能找到的用例开发了一整套库。验证、序列化、数据库抽象、CLI解析器、HTTP路由器、RPC框架、记录器、模板系统、事件系统等等。与其他库的根本区别在于,类型信息是功能的核心,尽可能多的TypeScript应该在运行时被重用,这样就可以减少开发者需要编写的模板,即使是复杂的程序也可以一目了然地看到它们在做什么。毕竟,TypeScript的主要特点之一是为复杂的代码赋予表达能力,而Deepkit以强大的框架形式将这些表达能力的好处带到了运行时,现在可以通过适当的企业模式更好地扩展应用架构。
Deepkit由两个主要领域组成。首先是Deepkit库和Deepkit框架。Deepkit库是一整个独立的TypeScript库(NPM包)家族,它们擅长一个主题,并经过优化、测试,旨在以最佳方式相互补充。一个项目可以使用单独的Deepkit库,也可以使用整个Deepkit框架,后者汇集了这些库的所有功能,并以调试器等附加工具对其进行补充。总之,它使开发人员能够建立复杂、快速和可生产的应用程序。 Deepkit支持一系列的使用案例。从简单的命令行工具(CLI程序)到网络应用和微服务再到桌面或移动应用。这些代码被设计成可以在任何已知的JavaScript引擎(浏览器以及NodeJS)中运行,并与Angular、React和Vue等其他框架完美整合。 Deepkit Framework背后的主张是应用干净的代码、SOLID原则和企业设计模式,不仅提供高质量的代码,而且让用户也能应用它们。另外,Deepkit试图在其文档和示例中推广这些相同的原则,但并不强迫开发者自己遵循这些原则。
高性能
软件开发中最困难的问题之一是在数月或数年后仍能保持较高的开发速度,特别是随着代码和团队的成长。有许多框架承诺快速启动,用它们可以在很短的时间内组装出更复杂的应用程序。然而,他们通常有一个共同的问题,即项目越老或团队越大,开发速度就会急剧下降。即使在几个月后,只有少数几个开发人员,开发速度也会崩溃,以至于下降到原来速度的1%,这种情况并不罕见。 为了抵制这种现象,有必要应用既定的设计模式,并提前使用正确的框架和库。企业设计模式已经确立了自己的地位,因为它们即使在较大的应用程序和大型团队中也能出色地扩展。正确地应用,它们会发展出自己的能力,特别是当一个项目要在较长的时间内(几个月到几年)开发时。
设计模式在理论上有其优点,但在实践中,几乎每一种模式也有其缺点。这些缺点根据语言和框架的不同而表现得不同,因为语言和框架本身决定了一个模式的应用是否符合人体工程学。仅仅因为某种模式可以应用于某种语言,并不意味着它可以自动地使开发变得更好、更快。 有些语言比其他语言更适合于应用某些模式。对于JavaScript甚至TypeScript本身,各种设计模式往往可以在其核心中使用,但有一些限制,大量损害用户体验,从而影响速度。例如,如果一个依赖注入框架指定并基于它们,那么Typescript装饰器及其所有的特异性可能成为必要的。 Deepkit的运行时类型系统确保以最符合人体工程学的方式和尽可能少的模板来应用这些设计模式,释放它们的力量,以便不仅在最初,而且在长期保持高开发速度。
Isomorphic TypeScript
TypeScript的最大优势之一是在许多用例中可以更好地编写复杂代码。这包括前端、后端、CLI工具、移动和桌面应用程序,以及更多。当一个项目跨越了这些用例并几乎完全依赖TypeScript时,它被称为Isomorphic TypeScript。在尽可能多的代码中使用TypeScript可以极大地提高开发速度。
-
代码可以在部门之间共享(前端、后端、微服务等)。
-
模型、类型和接口
-
验证
-
业务逻辑
-
-
单一包管理器的统一审计系统。
-
在所有部门中重复使用熟悉的第三方库。
-
团队内的知识共享。
-
招聘简化为一个群体(而且是最大的群体:JavaScript开发人员)。
Deepkit框架及其运行时类型系统旨在最大限度地利用Isomorphic TypeScript的这些以及更多的优势,从而使其最大的力量凸显出来。
双栈(不同语言的前端和后端)等老方法已经远远跟不上了,因为仅语言之间的上下文切换就已经花费了巨大的精力和时间。所有其他已经解释过的优点甚至使它成为一个不公平的比较。像TypeScript这样的同构技术栈,如果应用得当,在基本层面上比任何后端/前端的双栈组合(如Java/JavaScript、PHP/JavaScript,甚至JavaScript/JavaScript)的开发时间快很多倍。由于更高的开发速度也意味着同样的功能需要更少的时间,这也意味着Isomorphic TypeScript可以节省资金。除了已经介绍的所有好处,这也是在所有下一步尤其是商业项目中使用Isomorphic TypeScript的杀手锏。