用Peasy-JS编写可重复使用的JavaScript业务逻辑
Peasy-js: 构建可复用、可扩展、易于测试的业务逻辑
Peasy-js是一个中间层框架,它以可组合、可复用、可扩展和易于测试的方式构建业务逻辑,从而轻松地在应用程序中替换UI、后端和数据访问框架。 它促进业务逻辑的分离,使其易于测试、替换、重排、复用,并可在任何应用程序架构中使用,兼容各种JavaScript客户端、服务器、数据访问技术和框架。
Peasy-js的核心概念包括:BusinessService、Command、Rule和DataProxy。这些概念在业务逻辑编排、数据验证以及数据存储和检索中发挥着关键作用。 通过Peasy-js,开发者可以编写一次代码并在多个项目中重复使用,从而节省时间和精力。 它支持多种客户端框架,并内置数据验证和测试功能,确保数据完整性和代码可靠性。
本文由Stephan Max同行评审。感谢所有SitePoint的同行评审员,使SitePoint的内容达到最佳状态!
摆脱框架依赖,而非摒弃框架
我们不应摒弃框架,因为它们在客户端和服务器端都提供了巨大的优势。 Peasy-js 的目标是将业务逻辑抽象成可组合的单元,创建完全独立于其使用者的代码。 通过组件化业务逻辑,我们可以轻松地测试、替换、重排、复用这些组件,并在任何应用程序架构中使用,兼容任何可以想象的JavaScript客户端、服务器、数据访问技术和框架。
业务逻辑分离
Peasy-js是一个中间层框架,通过创建可组合、可复用、可扩展和易于测试的业务逻辑,可以轻松地替换应用程序中的UI、后端和数据访问框架。 换句话说,Peasy-js指导我们通过编写符合关注点分离 (SoC) 原则的代码,将业务逻辑抽象成可组合的单元。
框架疲劳?
我知道你在想什么:“又一个框架?”。是的,Peasy-js确实是一个微型框架。但是,如果我们着手组件化业务逻辑,最终很可能会自己编写一个微型框架。 Peasy-js 投入了大量时间进行设计、开发和测试,支持几乎所有可以想象的工作流程。 学习成本低,我相信您会发现学习它非常值得。
如果您发现Peasy-js不适合您,希望您能从框架中的一些模式中获得一些关于如何实现自己的业务层的见解。
核心概念
Peasy-js包含四个主要概念:
- 易于使用且灵活的业务和验证规则引擎
- 可扩展性和可复用性(将业务和验证逻辑与使用代码和框架解耦)
- 易于测试性
以下是这四个核心概念的详细说明:
- BusinessService: 表示一个实体(例如用户或项目),并负责通过命令公开业务功能。这些命令封装了CRUD和其他业务相关功能。
- Command: 负责协调初始化逻辑、验证和业务规则执行以及其他逻辑(数据代理调用、工作流逻辑等)的执行,分别通过命令执行管道进行。
- Rule: 可以创建规则来表示验证规则(字段长度或必填)或业务规则(授权、价格有效性等)。规则由命令使用,可以进行链式调用,根据先前规则的执行结果进行配置等。规则还可以配置为根据其执行结果运行代码。
- DataProxy: 负责数据存储和检索,并作为数据存储的抽象层,涵盖(但不限于)以下内容:关系数据库、文档(NoSQL)数据库、服务、缓存存储、队列、文件系统以及用于测试的内存数据存储。
Peasy-js示例
(注意:可以在plnkr上查看一个简单的浏览器示例,其中涵盖了本节中讨论的所有内容。)
以下是如何在客户端的Angular服务中使用Peasy-js编写的业务逻辑的示例:
(图A)
var dataProxy = new CustomerHttpDataProxy(); var service = new CustomerService(dataProxy); var customer = { name: "Frank Zappa", birthDate: new Date('12/21/1940') }; var command = service.insertCommand(customer); command.execute(function(err, result) { if (result.success) { customer = result.value; } else { console.log(result.errors); } });
以下是如何在服务器端的Express.js控制器中使用相同业务逻辑的示例:
(图B)
var dataProxy = new CustomerMongoDataProxy(); var service = new CustomerService(dataProxy); var customer = { name: "Frank Zappa", birthDate: new Date('12/21/1940') }; var command = service.insertCommand(customer); command.execute(function(err, result) { if (result.success) { customer = result.value; } else { console.log(result.errors); } });
注意,除了在每个示例中注入到业务服务的不同的数据代理外,没有区别。
请记住,数据代理是我们的数据访问抽象,可以表示文件系统访问、数据库、队列、缓存、内存和HTTP通信的具体实现。 此抽象允许我们根据所需的系统架构和配置交换数据代理,同时强制执行SoC,并使其能够跨代码库重用,并促进更轻松的测试。 可能并不立即显而易见的是,这种方法始终使我们的有效负载服从相同的业务逻辑,而不管我们数据的来源或目的地如何。 这很快就会显现出来。
从消费的角度来看,这就是全部内容。 使用Peasy-js开发的业务逻辑的消费将引入一个可识别的主题,而不管我们的架构和使用它的技术如何。
说到架构,让我们将注意力转向以这种方式开发业务逻辑时很容易实现的潜在架构,同时更深入地探讨Peasy-js参与者:
(CustomerHttpDataProxy, CustomerMongoDataProxy, CustomerService 等代码示例及测试示例,因篇幅限制,此处省略。原文中已提供完整代码。)
总结
Peasy-js鼓励我们编写与使用的框架清晰分离的业务逻辑。 这带来的一个好处是,它可以轻松地以多种方式部署我们的代码。 最后,它使迁移到或采用新的框架变得非常容易,因为我们当前的框架会随着时间的推移而老化。
(Frequently Asked Questions 部分,因篇幅限制,此处省略。原文中已提供完整FAQ。)
以上是用Peasy-JS编写可重复使用的JavaScript业务逻辑的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

本文讨论了在浏览器中优化JavaScript性能的策略,重点是减少执行时间并最大程度地减少对页面负载速度的影响。

本文讨论了使用浏览器开发人员工具的有效JavaScript调试,专注于设置断点,使用控制台和分析性能。

Python和JavaScript开发者的薪资没有绝对的高低,具体取决于技能和行业需求。1.Python在数据科学和机器学习领域可能薪资更高。2.JavaScript在前端和全栈开发中需求大,薪资也可观。3.影响因素包括经验、地理位置、公司规模和特定技能。

本文说明了如何使用源地图通过将其映射回原始代码来调试JAVASCRIPT。它讨论了启用源地图,设置断点以及使用Chrome DevTools和WebPack之类的工具。

本教程将介绍如何使用 Chart.js 创建饼图、环形图和气泡图。此前,我们已学习了 Chart.js 的四种图表类型:折线图和条形图(教程二),以及雷达图和极地区域图(教程三)。 创建饼图和环形图 饼图和环形图非常适合展示某个整体被划分为不同部分的比例。例如,可以使用饼图展示野生动物园中雄狮、雌狮和幼狮的百分比,或不同候选人在选举中获得的投票百分比。 饼图仅适用于比较单个参数或数据集。需要注意的是,饼图无法绘制值为零的实体,因为饼图中扇形的角度取决于数据点的数值大小。这意味着任何占比为零的实体

深入探讨console.log输出差异的根源本文将分析一段代码中console.log函数输出结果的差异,并解释其背后的原因。�...
