问题标签 [decoupling]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
javascript - 如何在 jquery 中处理或最小化紧耦合
描述
通过设计,大多数 jquery 代码会导致很多紧密耦合,例如选择器假定 html 的特定结构
如果相应的 html 发生变化,无论出于何种原因,
功能被破坏。
问题
- 处理紧密耦合的最佳方法是什么?
- 有什么方法可以放松它?
答案,方法
- 使用 html 自定义数据属性将 css 与 js 逻辑分开。例如
data-submenu="true"
在 html 上添加并var mySubnav = $("[data-submenu]");
在 js 端使用。 - 实施可靠的测试环境
- 尽可能松散地耦合,使用最不具体的选择器,例如
$("a.sub-menu')
. 也可以看看 - 通过 (1) 预先检索对静态 DOM 元素的引用,以及 (2) 将选择器字符串存储在一个位置(在代码的顶部),从 jQuery 代码的主体中消除表示 CSS 选择器的实际字符串文字。
- 使用 javascript 框架,例如Backbone,它通过视图将 javascript 与 DOM 分离
- 由于事件管理,使用委托和实时耦合
design-patterns - 状态模式:我应该信任哪个类来更新状态?
我正在通过阅读Head First Design Patterns来学习设计模式,并且我刚刚完成了关于状态模式的章节。但是,有一件事我没有得到:
在书中,有状态的类称为Context,而实际的状态实现State接口。当给书一个请求时,使用这里的方法来改变状态:
- Context接收请求;
- Context 在它拥有的 State 上调用 handle() 方法,将请求交给 State;
- State 处理请求,并在 Context 中设置 State 如果它应该改变。为此,States 将 Context 作为一个字段。
但是,在我看来,这似乎在两个类之间给出了某种“递归”耦合,并且是不直观的。如果我没有阅读他们的解决方案,我更喜欢以下设计:
- Context接收请求;
- Context 在它拥有的 State 上调用 handle() 方法,将请求交给 State;
- State 处理请求,并返回一个 State;是否是另一个国家取决于如何处理请求。
- 上下文将自己的状态设置为返回的状态。
我能想到的优点和缺点:
- 如果我们将所有可能变化的东西放入 State 类、Context 和 State 中并变得更加解耦,因为它们不需要窥视彼此的字段;
- State 类可能会变得更大;
- 状态可能不容易在不同的上下文中重用。但是,我们可以将States 实现为实现State 接口的抽象类,并具有由抽象States 子类化的Contexts 使用的具体States。
是否有任何具体原因应该支持第一个(由Head First Design Patterns使用),或者第二个选择也有效并在实践中使用,或者它有一些我没有看到的严重缺陷?
感谢您的所有投入以及您花时间阅读和回复!
c# - 如何将实现细节正确地解耦到.net中的类库中
我想知道c#(甚至可能是cli)中是否有一种标准方法可以有效地将实现逻辑解耦为单独的类库/程序集,这些类库/程序集将由一个进程动态加载,该进程将基于一个公共接口对这些库执行操作。
更准确地说:假设我正在构建一个接收消息的服务,并将这些消息的处理委托给其他东西。就像是:
我希望该过程在运行时从某种配置加载类库。我假设这个库会有一些主类或类工厂,它们实现了一些接口部分,如下所示:
这一切都让人感觉有点像java beish,我需要做的就是让程序集中的一个类实现某种可注入接口,在应用程序配置中添加一行并免费获得大量东西。
vb.net - 在处理接口时如何处理共享成员?
所以我做了大量的工作,试图为一组通用的类创建一个接口。这个想法是创建一个每个类都可以在集合中使用的接口,但最终每个类都是不同的。原来接口不喜欢共享成员。我尝试了什么:
显然,如果我在这方面做了功课,我就会知道共享成员不能在接口中使用。我应该让各个类完全负责处理其共享成员吗?是否有另一种方法可以将与共享成员的耦合降至最低?大约有 20 个左右的类将实现一个接口。提前致谢。
types - 如何在 clojure 中构建健壮的数据 API?
我发现由于缺少数据 API,我的 clojure 应用程序在结构上非常迅速地耦合。我有带有名称的键的映射,如果输入错误,因为要抛出异常或错误。我还注意到在解构列表时很容易出错(例如,您可能解构了列表的错误部分)。
来自 Java 世界,通常我使用我的 IDE 来帮助我从最小的、无序的数据对象中获取“正确的”数据。但是 clojure 映射传递似乎与此相反。
在没有类型系统或 ide 代码补全的情况下,clojurians 如何进行防御性编码?
entity-framework - 使用实体框架解耦数据层
我正在使用 EF 4.0、linq to entity、VS 2010 和 SQL Server 2005 存储过程来做一个小型搜索应用程序。我已经设计了 EDM 和所需的层。表示层正确显示搜索结果。
现在的困境是搜索应该足够灵活以从不同的表中读取。例如,对于当前的搜索,应用程序正在从表 A 中读取数据。明天应用程序可能需要从表 B 中读取,该表的列名可能与表 A 完全不同。
使用 EDM 如何将表 A 列映射到表 B 列,而不会对表示层产生任何影响。
任何建议/指针/链接将不胜感激。
非常感谢您的时间和帮助。
c# - 抽象 DateTime.Current 依赖项
是否有 nuget 包或其他“标准”包装了您的代码耦合到时创建的硬依赖项DateTime.Now
?
在写我自己的之前,我正在寻求这方面的指导。尽管这样做是微不足道的,但如果它已经作为某种标准,我宁愿使用现有的东西。
symfony - symfony 2.0 捆绑互通
我想制作一个基于主包的应用程序,让其他开发人员可以制作自己的包来实现其他功能。
Symfony 2.0 似乎是一个不错的选择,但是我不知道如何让捆绑包一起工作,同时保持解耦。
在 MainBundle 中,我将创建一个控制器,它生成一个用户列表,如下所示:
如何让第三方捆绑包将其自定义按钮添加到此列表中?
例如,一个AvatarBundle可能想要添加一个按钮来上传 Image,一个SendEmailBundle我想要添加一个按钮来向用户发送电子邮件等等。
如何保持捆绑独立性?我怎样才能做到这一点?
非常感谢,马西莫
xna - 如何最好地解耦对象,例如“蛇”游戏
我在 C#/XNA 中创建一个蛇游戏是为了好玩,但这是练习一些好的对象设计的好机会。
蛇对象
有一个蛇对象,它本质上是一个链表,每个节点都是一个带有与地图相关的 X 和 Y 坐标的向量。
还有一些属性,例如蛇是否刚刚吃完(在这种情况下,不会为这次更新删除最后一个身体节点)、蛇移动的方向等。
地图对象
地图(游戏区域)将其内容保存在 2D 整数数组中 - 使用基元数组来存储地图应该可以减少内存消耗并且比向量数组更快(并且更容易)迭代。
内容在枚举 {Empty, Wall, Snake, Food} 中定义,然后将其存储在数组中的相关坐标处。
地图中还保留了对蛇对象的引用,以便每次调用渲染都会循环通过构成蛇的节点并将其渲染到地图上的正确位置。
问题!!
我的问题是......这种耦合是否太紧,在这种情况下是否有任何建议(即观察者模式)或者这种情况是否可以......
我试图想办法让蛇从需要知道地图使用的坐标系中解耦,但想不出一种方法让它工作并保持每个节点相对于每个节点的位置-其他。
任何答案表示赞赏,干杯!
c# - 数据容器与对象加上行为
我正在为工作流层次结构编写存储解决方案。
为了简化图片,我有 2 种类型的对象,一个 Workflow 和一个 WorkflowStep。
尽管 WorkflowStep 分层地位于 Workflow 之下,但 Workflow 不会聚合 WorkflowStep,因为我们将这些对象视为数据容器。
所以这给我留下了以下课程:
不在 Workflow 中聚合 WorkflowStep 的原因(即使在逻辑上适合)是这些对象纯粹被视为数据容器,它们以后可能会发生变化,我们希望保持这些对象的存储与对象本身分离。
当然,另一种选择是做这样的事情:
两种方法的优缺点是什么?有没有关于这两种设计的文献?