Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >我的简单API的命令链/责任模式。好主意?

我的简单API的命令链/责任模式。好主意?
EN

Software Engineering用户
提问于 2013-09-29 09:00:43
回答 3查看 1.8K关注 0票数 2

我需要为我正在进行的项目编写一个简单的API。这个API将在内部用于执行AJAX调用触发的一些服务器端操作。

为了让事情变得更简单,我想使用命令链/责任链模式。

以下是我想要做的事情的更多细节:

我正在创建一个“仪表板”,我的应用程序管理员将能够更新存储在数据库中的项目的信息(元数据)。

为了简化管理员的工作,我选择了使用AJAX。所以,如果一个管理员想要删除一个项目,(S)他点击“删除按钮”。然后将POST请求发送到edit.php页面,其中包含执行删除所需的所有信息(操作:删除、元素:链接、id : xx .)。actionelement,当然还有id可以改变的地方。

这就是为什么我选择了一个迷你API,它将根据actionelement数据调用不同类的不同函数。

现在,为了实现API,我决定使用责任链设计模式.为什么?因为我可以轻松地添加、删除或更新类,而不必修改API本身。

责任链设计模式适合我的情况吗?

EN

回答 3

Software Engineering用户

回答已采纳

发布于 2013-10-03 02:05:09

命令链模式的思想是构建一个处理程序链,并沿着这个链传递一个命令,直到其中一个处理程序处理该命令。这种行为通常出现在事件处理中,例如,UI按钮中的单击事件在UI元素的层次结构中气泡,直到到达一个附加了相应处理程序的元素为止。然后,这个处理程序可以决定它是否处理该命令--实际上结束了事件处理--在这种情况下,事件将沿着链进一步传播。

现在让我们假设我们为您使用该模式的web。在我看来,您所描述的是一个经典的CRUD(L)接口,您的操作是(创建、读取、更新和删除)的一个子集。你说你有删除请求,我假设你也想要某种更新请求。让我们进一步假设您为这类请求编写了相应的处理程序hupd和hdel。按照命令链模式,然后构建链赫德尔湖来处理对API的请求。所发生的情况是,传递到链中的每个更新请求都由hupd立即处理,而每个删除请求都被hupd拒绝并传递给处理它的hdel。此行为显示了操作和处理程序之间的固定映射,这实际上使链变得不必要。(事实上,由于每次删除请求的检查和传递,链甚至会降低系统的性能)。这一切为什么要发生?因为没有两个处理程序负责处理具有相同操作类型的不同子集的请求。这里真正想要的是一个直接映射“更新”=> hdel,“删除”=> hdel“和一个dispatcher,它接收各自的请求并直接将它们传递给相应的处理程序。如果有动态注册表保存映射,则这种设计对于新的操作仍然是可扩展的。

现在您可以说,您希望有不同的处理程序,例如,删除A和B类型的元素,这为具有相同操作类型的请求子集提供了处理程序。但是,在处理程序和元素类型之间还有一个直接和固定的映射,也就是说,您可以根据目标元素类型重复分派请求。这为您提供了一个两级调度,在最坏的情况下,使用命令链,您将通过操作编号乘以元素类型的处理程序传递请求。

结论:我不建议使用命令链模式来实现这种API.要使模式具有价值,您需要一个场景,其中您希望动态添加和删除处理程序,以及处理程序实际处理事件的条件不能通过常量的简单映射来表示。

票数 5
EN

Software Engineering用户

发布于 2013-10-07 21:25:46

我不建议使用单一方法来处理所有请求操作。理想情况下,您应该使用DELETE来处理delete操作,从而帮助您拥有一个API,该API能够准确地告诉API的所有内容,以及POST、GET等等。

我建议您首先定义API作为起点。

  1. 删除仪表板-> http://domain.com/dashboard/itemId中的项-删除操作
  2. 刷新项-> http://domain.com/dashboard/itemId - Get操作

要知道,API是不言自明的,它将给出您想要做的事情以及维护方面的帮助的清晰图片。

在您的控制器中,您可以检测到操作,然后为每个操作调用相应的服务来执行操作。COR可能不是一个好的选择,因为它不适合这里。

票数 2
EN

Software Engineering用户

发布于 2013-10-02 23:52:57

首先,请注意这个问题拼写错误,因为命令链模式与公共API无关,而是与其内部的服务器端实现有关。

也就是说,指挥链模式非常适合你的需要。由于API是用新的操作和/或元素进行扩展的,所以可以将新的处理程序添加到链中以实现新的行为,而无需修改现有的行为。

票数 0
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/212880

复制
相关文章
jQuery动态加载select下拉列表「建议收藏」
  以前使用的select下拉列表都是静态的,select 的option数据都是写死的。现在项目中的select需要根据不同的场景使用不同的数据,解决方式就是动态加载option数据。
Java架构师必看
2022/03/14
4.6K0
jQuery 样式操作
jQuery 可以使用 css 方法来修改简单元素样式; 也可以操作类,修改多个样式。
星辰_大海
2020/10/09
1.4K0
jQuery 样式操作
​ jQuery 可以使用 css 方法来修改简单元素样式; 也可以操作类,修改多个样式。
梨涡浅笑
2020/10/27
1.5K0
jquery样式操作
选择器获取的多个元素,获取信息获取的是第一个,比如:$("div").css("width"),获取的是第一个div的width。
Devops海洋的渔夫
2019/05/30
1.7K0
gridview样式模板_css列表样式
<style. type=”text/css”> .GridViewStyle { border-right: 2px solid #A7A6AA; border-bottom: 2px solid #A7A6AA; border-left: 2px solid white; border-top: 2px solid white; padding: 4px; }
全栈程序员站长
2022/09/30
4.2K0
bootstrap 列表list样式
<ul class="list-group"> <li class="list-group-item">免费域名注册</li> <li class="list-group-item">免费 Window 空间托管</li> <li class="list-group-item">图像的数量</li> <li class="list-group-item">24*7 支持</li> <li class="list-group-item">每年更新成本</li> </ul>
用户5760343
2019/07/05
1.7K0
bootstrap 列表list样式
jQuery实现点击添加样式同胞移除样式
效果图 代码 .box { display: flex; } .rol { padding: 15px; border
明知山
2020/09/03
5.8K0
简单jquery写css样式[通俗易懂]
大家好,又见面了,我是你们的朋友全栈君。jquery写css样式方法如下:一般要在页面初始化的时候就要加载样式,所以使用ready()方法
全栈程序员站长
2022/08/05
1.8K0
前端基础-JQuery操作样式
第6章 JQuery操作样式 6.1 CSS操作 功能:设置或者修改样式,操作的是style属性。 操作单个样式 // name:需要设置的样式名称 // value:对应的样式值 // $obj.css(name, value); // 使用案例 $('#one').css('background','gray');// 将背景色修改为灰色 设置多个样式 // 参数是一个对象,对象中包含了需要设置的样式名和样式值 // $obj.css(obj); // 使用案例 $('#one').css(
cwl_java
2020/03/26
1.2K0
bootstrap笔记(二)——列表样式和表格样式
table-striped配合 “:nth-child”选择器使用,来改变默认的颜色效果,也称之为隔行变色或斑马线,起到两种不同颜色变化的效果,条纹状态的表格
兮动人
2021/06/11
1.4K0
bootstrap笔记(二)——列表样式和表格样式
JQuery生成图片列表
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <title>生成图片列表</title> 5 <style type="text/css"> 6 *{ margin: 0px; padding: 0px; } 7 .bpp4{ width: 700px; height: 280px; padding-left: 10px; padding-bottom: 10px; border: 1px solid #333333
彼岸舞
2020/09/30
7.8K0
动态类名和动态样式
给标签添加动态样式 // H5页面中,ios正常显示,但是background样式在andriod机不生效 <div class="img_container" :style="{background:'url('+album.base64Img+')'}"></div> // 改为下面这种写法ios和andriod都可以显示了 <div class="img_container" :style="{background:`url(${encodeURI(album.base64Img)})`}"></d
xyzzz
2021/06/18
1.3K0
jQuery 动态绑定
这是在项目过程中所遇到的一个问题,给 JS 动态生成的元素绑定事件失效,代码如下所示:
Nian糕
2018/08/21
2K0
jQuery 动态绑定
如何动态绑定样式
这个是我想要的页面效果,每个卡片的背景颜色都不一样 image.png 第一次需要动态绑定颜色,发现怎么写都不对。。。众大佬支招终于解决了~ 当遍历出来的每个项都需要不同的样式的时候,按照以下这个格式套进去就可以了 :style = "{'background-color':item.bgc}" image.png 如果样式绑定在遍历的每个项中,也可以通过插槽的方式获取到当行的样式 image.png
xyzzz
2020/11/25
2.2K0
如何动态绑定样式
jQuery(操作Dom-样式操作)
css('styleName','styleVaule'):修改行内样式 隐式迭代
全栈开发日记
2022/05/12
1.2K0
Python列表推导式(多种样式列表推导式)
所谓推导式也就是Python中一种更有风格的Python代码的写法。什么样是有风格的呢?假如有个需求,它可能需要三行五行甚至是更多行代码完成,但是如果是同样的需求用推导式来书写的话很可能一行代码就完成了,所以推导式的作用就是化简代码用的。
python自学网
2022/05/06
5900
Python列表推导式(多种样式列表推导式)
通过样式覆盖修改Tcplayer动态水印样式
效果图: 41102.gif 在线demo 覆盖样式代码: .tcp-dynamic-watermark-container .tcp-dynamic-watermark-content { font-size: 30px; color: red; } 全部demo代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta http-equiv="X-UA-
良人
2022/04/11
3.1K0
python-docx表格样式列表
python-docx的表格样式如下: 使用方法: table.style='Medium Grid 1 Accent 1' or document.add_table(3,4,style='Medium Grid 1 Accent 1') 表格样式:Normal Table 第1列 第2列 第3列 表格样式:Table Grid 第1列 第2列 第3列 表格样式:Light Shading 第1列 第2列 第3列 表格样式:Light Shading Accen
py3study
2020/01/07
2.2K0
css列表属性和样式控制
如下图是360浏览器主页的内容,上边有导航,下边是新闻列表,这种布局很常见,今天就来学习css列表属性之后并制作它。
呆呆
2021/11/26
1.3K0
css列表属性和样式控制
如下图是360浏览器主页的内容,上边有导航,下边是新闻列表,这种布局很常见,今天就来学习css列表属性之后并制作它。
呆呆
2021/09/29
1.1K0

相似问题

如何将自定义维度添加到服务器端GTM容器中的Universal标记中,该容器接收来自GA4标记的点击率?

13

GTM GA4配置标记阻止UA GTM标记

17

引导<article>标记中的“容器”

14

“覆盖组合”来自不同的容器?

10

元素位于容器的底部,该元素不覆盖容器中的文本

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文