首页
学习
活动
专区
圈层
工具
发布

为什么说要用DDD替代CRUD来设计API

解决方法:DDD 那么该如何解决这个问题,有其他更好的方案吗?我个人更喜欢基于领域驱动设计(DDD)来设计 API。DDD 的基本思想是说,软件的建模应该发生在真实世界的问题得到解决之后。...对于银行的 API 来说,账户就是一个领域对象(DDD 里的实体)。这次我们不再使用 CRUD 来为账户建模,而是为账户定义一组业务操作。以下是一系列写入操作: 开户(Open)——新开一个账户。...在定义好业务操作之后,就可以将它们与 REST API 映射起来: POST /account ——新开一个账户。 PUT /account//close ——注销一个已有的账户。...如果你打算将 API 暴露成公共端点,就需要在很长的一段时间内为 API 提供支持,最好还是把它看成是一个永久性的事项。...我总是建议人们在前期多花一点时间,因为有些东西到了后面就很难修改,而 API 就是一个很好的例子。 所以,在进行 API(REST 或其他)设计时,请停止使用 CRUD 模型。

1.7K20

Nodejs学习路线图

Node.js使用事件驱动,非阻塞I/O模型,轻量、高效,可以完美地处理时时数据,运行在不同的设备上。 1.1. 谁在用Nodejs?...2.Nodejs并没有重新开发运行时环境,而是选择了目前最快的浏览器内核V8做为执行引擎,保证了Nodejs的性能和稳定性。...内存控制,让Javascript和Java比较复杂数据类型定义,也是很困难的。因为Javascript的面向对象是基于JSON的,而Java是直接使用内存结构。...mysql 是连接MySQL数据库的通信API,可以进行访问MySQL的操作。 通常用Nodejs做Web开发,需要3个框架配合使用,就像Java中的SSH。...restify比起express更专注于REST服务,去掉了express中的template, render等功能,同时强化了REST协议使用,版本化支持,HTTP的异常处理。 ?

7.4K102
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Day.js 2kb日期时间处理javascript库

    如果你曾经用过 Moment.js ,那么你已经知道如何使用 Day.js 。优点体积小:Day.js 的体积仅为 2KB 左右,而 Moment.js 的体积约为 67KB。...Day.js轻量替代方案,2018 年发布,设计灵感直接来源于 Moment.js,语法高度相似,但更简洁轻量。设计目标:通过最小化核心功能 + 插件机制,提供常用时间操作能力,避免过度设计。...性能 解析和操作大型时间数据时性能中等,体积大导致加载速度较慢。...引入插件(可选)如果你需要使用 Day.js 的高级功能(如时区支持),可以引入相应的插件:5. 总结:如何选择?...选 Moment.js:如果项目依赖其成熟生态、需要兼容旧浏览器,或时间逻辑极其复杂且不愿配置插件。选 Day.js:如果追求轻量、高性能、简洁 API,且能接受通过插件扩展功能(推荐新项目使用)。

    28500

    9 个超实用的 JavaScript 原生插件工具

    2KB 不可变日期和时间库。 在JavaScript 中,你最有可能使用日期和时间库构建应用程序,而days.js是Moment.js的绝佳替代品。因为它更轻巧并且具有所有相同的 API。...文档也很棒,新开发人员可以在更短的时间内轻松适应day.js。 4、 immer 地址:https://github.com/immerjs/immer ? 通过改变当前状态来创建下一个不可变状态。...它的样板代码很少,因此你的代码看起来更简洁,结构更简洁。 5、jsdoc 地址:https://github.com/jsdoc/jsdoc ? 用于 JavaScript 的 API 文档生成器。...生成的文件非常基础,用于文档目的,你可以在短时间内拥有自己的功能文档。 该文档对于新开发人员来说也很棒且易于使用,并且在开始使用jsdoc时不需要太多经验。...如果你正在使用 Angular 应用程序,建议使用 Akita,因为与ngrx和ngxs相比,它更容易。

    1.6K20

    前后端时间转换的那些常见问题及处理方法

    2.1 使用LocalDateTime处理时间LocalDateTime是Java 8引入的新时间API的一部分,能更好地处理时间数据。它没有时区信息,适用于应用程序内部的时间处理。...是一个轻量级的时间处理库,它的API与moment.js相似,但体积更小。...4.5 API设计考虑时间问题在设计API时,明确时间字段的传递格式和时区,避免出现由于格式不一致导致的错误。例如,后端可以在返回时间数据时指定时间格式和时区信息,前端可以根据需要进行转换。...通过本文的介绍,我们了解到Spring Boot和Vue.js分别如何处理时间、如何进行时间的格式化和时区转换,以及如何在实际开发中实现一个带有时间转换功能的完整流程。...时间处理是一个复杂且细致的工作,特别是在多时区、多语言的环境中。通过合理地使用工具库、统一时间格式以及在API设计时考虑时区问题,开发者可以避免很多常见的坑,确保时间数据在整个应用中是一致且准确的。

    1.7K10

    如何开发车辆管理系统中的用车申请板块(附架构图+流程图+代码参考)

    B -->|否| X[提示时间/车辆冲突,返回修改] B -->|是| C[进入审批流程] C --> D{审批通过?}...1.冲突检测(关键)在申请提交或审批通过时,必须检测同一时间区间是否已有相同车型/车辆被占用。...REST 端点POST /api/vehicle-requests — 提交申请GET /api/vehicle-requests/:id — 获取详情(含审批链)POST /api/vehicle-requests...审批状态透明:申请单页显示审批进度条(每个审批节点的处理人/结果/时间)。移动优先:很多申请场景是现场开单,用手机提交更方便,移动端 UI 要简洁,拍照上传还车凭证。...以迭代方式上线既能控制成本,又能基于真实数据优化规则。FAQ 2:如何确保在高并发提交时不会出现两个人同时分配到同一辆车?

    40710

    为什么每个API策略都需要GraphQL?

    虽然 REST API 解决了许多最初的问题,但它们也引入了一系列 挑战,而我们尚未做好应对的准备。 使用 GraphQL 摆脱复杂性陷阱 我要告诉你,你并没有充分利用现代 API 的所有功能。...这意味着你的 API 团队可以专注于更有意义的工作。 你可以通过为他们提供一个包含他们所需一切的 GraphQL 端点来最大程度地降低新开发团队的入职成本,而无需全面的文档和知识转移。...你向前端团队公开后端系统越多,新开发人员了解这些系统所需的一切并加快速度就越慢。GraphQL 的统一界面和单一端点使前端开发人员更容易构建应用程序,从而减少开发时间和成本。...像 SQL 一样,它通过允许用户请求特定数据而无需手动逐表搜索来彻底改变数据查询,GraphQL 提供了一种动态查询语言,可以从多个 API 和来源中检索数据一次调用。...集成时间也大大减少,因为 GraphQL 的灵活性和适应性使其更容易与现有系统和服务集成。

    30910

    vue快速上手教程03--axios、过滤器、侦听器

    2.1 特性 从浏览器中创建​​XMLHttpRequests​​ 从 node.js 创建​​http​​ 请求 支持​​Promise​​ API 拦截请求和响应 转换请求数据和响应数据 取消请求.../js/axios.min.js'> #基本用法 //可以通过向 axios 传递相关配置来创建请求 //axios(config) 基于promise的api ,所以在then...案例:时间格式化 moment.js 常用的js格式化日期库 使用moment.js : http://momentjs.cn/ moment.js中文网 需求说明: 格式化的规则是当 月份、日期、...值得注意的是 REST 并没有一个明确的标准,而更像是一种设计的风格。它本身并没有什么实用性,其核心价值在于如何设计出符合 REST 风格的网络接口。...当你有一些数据需要随着其它数据变动而变动时,可以使用侦听器来完成,就是通过侦听器监视数据的变化,从而做出合适的对应操作。

    56610

    微服务平台之网关架构与应用

    API 网关是一个处于应用程序或服务(提供 REST API 接口服务)之前的系统,用来管理授权、访问控制和流量限制等,这样 REST API 接口服务就被 API 网关保护起来,对所有的调用者透明。...网关对外提供治理数据的 rest 接口, 治理平台通过此接口将治理数据发送至网关。 3. 网关可以部署多个对等实例, 以扩充其性能。 4....5.普元EOS 8网关应用 为了方便用户更好的理解和使用我们的EOS8网关,在EOS8的Governor平台中,提供了一整套的可视化操作。...问2:新发布API或者Filter如何做到不重启网关?...答:新发布API是通过我们governor的统一配置中心进行热部署推送,可以做到实时性,filter暂时还只能通过重启的方式解决,但是在下个版本,应该也可以做到。 问3:网关的负载均衡如何理解?

    2K20

    在Node.js中发出HTTP请求的7种方法

    对于新开发人员而言,学习如何发出HTTP请求以交换数据可能是具有挑战性的。 幸运的是,对于Node.js开发人员而言并非如此。 有许多经过考验的解决方案可用于发出任何种类的HTTP请求。...出于测试目的,我们将为所有示例使用JSONPlaceholder假的todo REST API。...对于编写涉及一系列事件的更复杂的代码,Promises是很好的。...使用以下命令从npm安装SuperAgent: $ npm install superagent --save 以下是使用SuperAgent调用伪造的REST API的代码段: const superagent...以下是调用我们的假REST API来使用Node-fetch模块获取待办事项信息的代码段: const fetch = require('node-fetch'); fetch('https://jsonplaceholder.typicode.com

    29.6K20

    2018年前端流行哪些技术?

    我主要是在 Node.js 中使用 Axios,替代了 request;浏览器中还是使用 Fetch API,还没有在浏览器中尝试使用 Axios。...ES5 语法,还提供了一些 polyfill (通过 core.js)实现了浏览器不支持的 feature。...REST 有一种明日黄花的感觉,虽然还在用,但是感觉早晚被 GraphQL 等取代,毕竟我们真的越来越不关心数据是如何获取的,而应该关注在 store 如何设计上,专注在领域分析上面。...lodash/moment.js – 最常用的两个 JS 库了,lodash 是一个现代、高效、模块化的 JS 功能包,moment.js 主要用来处理日期时间相关的操作。...的问答挺多的,我更关注的可能还是了解他们是如何实现的,以及解决了什么问题吧 source maps – 了解 js、css 的 source maps 是如何生成的,相应的规范,在浏览器、生产环境调试、

    2.9K10

    vuejs、eggjs、mqtt全栈式开发设备管理系统

    vuejs、eggjs、mqtt全栈式开发简单设备管理系统 业余时间用eggjs、vuejs开发了一个设备管理系统,通过mqtt协议上传设备数据至web端实时展现,包含设备参数分析、发送设备报警等模块。...moment挂载到Vue的prototype上面,这样就可以在任意vue组件中使用*this....设备模块 export const SETDEVARGSMSG = 'setDevArgsMsg' 注意: 1、mutations的名称定义时遵循官方,一般定义为常量 2、state的数据只有通过...5、vuex中的getters相当于state的计算属性,监听state数据变动时可以使用getters vue-router路由模块 路由模块基本使用: import Vue from 'vue...发送 3、通过response的interceptors可以对响应数据做进一步处理,比如401或403跳转至登录页、报错时直接reject返回err信息等 4、基本的rest请求方式代码封装基本一致

    7.4K70

    6 个 Python 的日期时间库

    当我试图编写从 API 中将日期时间字符串转换为 Python datetime 对象时,我很难理解其中的特定部分,因此我决定请求帮助。 有人问道:“为什么你不使用 dateutil 呢?”...如果这是你在 Python 中第一次接触日期和时间,请暂停并阅读 如何使用 Python的日期和时间 。要理解为什么在编程中处理日期和时间是困难的,请阅读 愚蠢的程序员相信时间。...Arrow Arrow 是另一个库,其目标是操作、格式化,以及处理对人类更友好的日期和时间。它包含 dateutil,根据其文档,它旨在“帮助你使用更少的包导入和更少的代码来处理日期和时间”。...Moment 还提供了使用人类可读的语言创建新日期的方法。...以下是如何使用 Maya 将日期时间表示为人类可读的短语: $ import maya $ maya.parse('2018-04-29T17:45:25Z').slang_time() '23 days

    2.4K20

    6 个 Python 的日期时间库

    当我试图编写从 API 中将日期时间字符串转换为 Python datetime 对象时,我很难理解其中的特定部分,因此我决定请求帮助。 有人问道:“为什么你不使用 dateutil 呢?”...如果这是你在 Python 中第一次接触日期和时间,请暂停并阅读 如何使用 Python的日期和时间 。要理解为什么在编程中处理日期和时间是困难的,请阅读 愚蠢的程序员相信时间。...Arrow Arrow 是另一个库,其目标是操作、格式化,以及处理对人类更友好的日期和时间。它包含 dateutil,根据其文档,它旨在“帮助你使用更少的包导入和更少的代码来处理日期和时间”。...Moment 还提供了使用人类可读的语言创建新日期的方法。...以下是如何使用 Maya 将日期时间表示为人类可读的短语: $ import maya $ maya.parse('2018-04-29T17:45:25Z').slang_time() '23 days

    2.6K10

    从这个API能看到整个前端的缩影

    /a.js' 在ES规范中只明确「模块说明符是一个字符串字面量」,并没有限制「如何解析模块说明符」,所以「解析模块说明符」的任务就交给了宿主环境。...很多API的兼容性问题可以通过polyfill解决。 所以,很自然的,库作者在面对模块规范的兼容性问题时,也想替用户做到最好。但是,这份努力也让代码行为变得更扑朔迷离。...对于如下CJS模块: // a.js cjs模块 exports.hello = () => { console.log('hello') } 在同级的ESM模块中引入,并通过解构或者对象方法来使用...或者更极端点,未来前端会逐渐抛弃打包工具么? 从ESM规范的角度出发,答案是否定的。...有两个刚需现阶段bundleless还无法解决: tree shaking ESM模块过多,导致发起大量请求 所以,在未来很长一段时间内,打包工具仍会存在。

    60430
    领券