问题标签 [loose-coupling]

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.

0 投票
2 回答
1250 浏览

ruby-on-rails - 什么是松耦合代码?

我最近学习了 Ruby 和 Rails,遇到了这些术语,我一时无法理解。

所以请解释一下,(如果可能的话,用类比)什么是松散耦合代码。

0 投票
4 回答
1030 浏览

c# - 我知道如何使用依赖注入,但我认为它没有实际优势

就是这个(注入依赖)

与此(创建依赖项)

他们说后一个示例很糟糕,因为......它违反了 DI......当然没有注入任何东西......但是如果 DI 不存在,那么有什么糟糕到需要从 Billing 类手动创建 CustomerService 呢?我认为服务接口的可交换性没有实际优势。

我要求一个带有源代码的实际示例,它可能是一个单元测试或显示一个实际解决方案,为什么它是如此松散耦合。

任何人都热衷于展示他的 DI 肌肉以及为什么它具有存在和应用的实际权利?

更新

所以人们不必阅读所有内容,我将在这里写下我的简短经验:

DI作为一种模式有实际用途。要通过不手动注入所有服务来遵循 DI(他们说这是一个糟糕的 DI 工具...),请使用 LightCore/Unity 之类的 DI 框架,但请确保您使用正确的工具来完成相应的工作。这是我没有做到的;-) 开发 mvvm/wpf 应用程序我还有其他要求,LightCore/Unity 工具无法支持它们甚至是障碍。我的解决方案是使用我很满意的 MEFEDMVVM。现在我的服务是在运行时而不是在启动时自动注入的。:-)

0 投票
2 回答
138 浏览

android - 帮助设计用于松散耦合系统的多线程执行引擎

我需要构建一个“执行引擎”来监听来自各种系统的请求并执行那些请求的任务。
我想在“执行引擎”中公开一个 Web 服务,每个系统都可以访问这个 Web 服务,要求进行一些操作。所有操作都将保存在磁盘中以处理故障(所有任务都是异步的)

例如,add_email_to_block_list,我们的一个网站可以要求“执行引擎”在邮件系统中执行此任务。

“执行引擎”假设在一分钟内(将来)处理超过 100 个请求。

很可能我将不得不使用 C# 来完成此类任务。(也是 JAVA 的机会)。

  1. 在设计这种核心引擎时需要考虑什么?
  2. 您是否知道有关这种系统的 WEB 上的某种用例?(可能是一些文章/教程?)
  3. 我正在谈论的这个“执行引擎”的专业名称是什么(所以我可以在谷歌中更好地搜索)?

谢谢

0 投票
1 回答
193 浏览

.net - 如何将进程松散地耦合到 VBA 和/或 .Net 的用户界面?

当我要求在一个长时间运行的进程上放置一个进度条时,我想到了这个问题,该进程没有用户界面的概念。事实上,该进程正在被写入一个库,以便从其他应用程序中提取。但是,如何为 WinForm 提供一种方式来订阅流程以在流程执行时进行更新?我已经从 VBA/VB6 和 .Net 中打开了这个问题,因为它是 UI 开发范围的一部分。还值得一提的是,这些是子例程,而不是运行方法的类,因此事件引发似乎是不可能的。我应该将递增变量公开吗?提前致谢。

0 投票
2 回答
732 浏览

c# - 如何让一个对象订阅另一个事件,同时保持两者松散耦合?

我有以下几段代码,在我看来,它们似乎是实现观察者模式所需的基本知识。这是标准,还是我做错了什么?

CormantRadDock 对象是动态创建的。RefreshAndCycleTimer 在页面上。

我担心,随着我的项目越来越大,LayoutManager 中会出现大量不相关的控件——只是在那里订阅。这是标准吗?我应该做一些不同的事情吗?

谢谢

0 投票
3 回答
304 浏览

jquery - jQuery 中自定义回调的松散耦合

我想知道是否存在允许在 jQuery 中松散耦合回调的设计模式/框架。

基本上,我有一个 ajax 调用,它检索回调函数中所需的设置。我有许多函数希望在 ajax 调用完成后触发,但希望避免执行以下操作:

我希望它是松散耦合的。有谁知道这是如何实现的?

谢谢,Gearoid。

解决方案

这是我最后使用的:

然后我的代码非常松散耦合,因为我可以将任意数量的回调函数传递给原始函数,它们将按顺序运行,例如:

0 投票
2 回答
1194 浏览

c# - 松耦合 NativeMethods

我需要使用 C# 中的本机 DLL。DLL 公开了几种我可以通过 P/Invoke 访问的方法和几种类型。所有这些代码都在一个标准的 NativeMethods 类中。为了简单起见,它看起来像这样:

为了实现松耦合,我需要提取一个接口并使用对 NativeMethods 的调用来实现它:

现在我可以在我的代码中使用 IFoo 作为依赖项并在测试中模拟它:

这里似乎有些不对劲。NativeMethods根据 FxCop,必须是内部的。IFoo那么(从 中提取的NativeMethods)也是内部的也是有道理的。但我不能只将其设置为内部 b/c,它用于公共 ctor(应该保持公开)。所以:为了实现松散耦合,我必须改变一个组件的可见性,否则它本来是内部的。对此你们怎么看?

另一个问题:组件具有public void DoSomehing(Bar bar)使用BarNativeMethods.cs 中定义的方法。我也必须将其公之于众才能正常工作。这个,或者创建一个新的Bar类来包装NativeMethods+Bar. 如果我采用公开的方式,那么NativeMethods也会公开,FxCop 抱怨“嵌套类型不应该是可见的”。如果我采用包装方式......好吧,我觉得为所有“本机类型”做这件事太费劲了。哦,还有第 3 种方法:将类型从 NativeMethods 中移开并公开。然后 FxCop 开始分析它们并找到所有在嵌套在 NativeMethods 中时隐藏的错误。我真的不知道这里最好的方法是什么......

0 投票
3 回答
5070 浏览

asp.net-mvc-3 - MVC 3 将实体作为接口传递

我目前正在使用 Ninject 作为我的 DI 的 MVC 3 项目,业务对象存储在单独的程序集中。我遇到了控制器参数的问题,在发回 CRUD 操作时,我收到错误“无法创建接口的实例”。我知道您无法创建接口的实例,但似乎我可以解决此问题的唯一方法是使用自定义模型绑定器并通过 FormCollection。这看起来真的很乱,我想尽可能多地保留项目中的特定类型代码 - 因此到处都是接口,并且 Ninject 到 DI 混凝土。不仅自定义模型绑定看起来很乱——我不会丢失我的 DataAnnotations 吗?

一些代码来描述我所拥有的:

有没有人遇到过这个?你是怎么克服的?

谢谢!

0 投票
1 回答
1007 浏览

c# - Entity Framework 4.1 实体上的松耦合

如果有人可以对此有所了解,请提供一些帮助。

我创建了一个运行良好的代码优先 MVC 3 应用程序。我现在正在重构以尽可能多地移除耦合,因为我希望域模型稍后在各种其他 MVC 3 应用程序中使用。我现在拥有的是通过规范化数据库持久化的实体集合,它们通过存储库模式进行 CRUD 编辑。我已经使用 Ninject 通过控制器的构造函数来 DI 存储库,并使用 MVC 3 项目中的模型充当 DAO。

因此,在域中,我有一个名为Case的实体,它具有另一个案例Client的外键,如下所示:

然后我有一个接口(该接口的存在主要是为了将它实现到视图模型以添加我的数据注释 - 我知道我可以将注释添加到域对象但正如我所说我想在其他应用程序中使用这个域模型,这将有不同的无处不在的语言。

然后我在 MVC 3 项目中有我的视图模型。

所以,我的第一个问题是:将我对Client的外键引用更改为IClient是一个新事物,它返回一个空对象。当类型是具体类时,它返回正常 - 我认为这是因为 EF4.1 尝试创建IClient的实例。我在这里完全错了还是有办法解决这个问题?

我的第二个问题(这可能会否定我的第一个问题)是通过将数据注释添加到继承域实体接口的视图模型中,我是否也做错了什么?我应该使用模型元数据吗?如果是这样,我如何使用元数据以使每个项目的数据注释都是唯一的,而无需触及域?

谢谢!

0 投票
2 回答
137 浏览

php - 查询PHP中的依赖注入

我一直在阅读依赖注入,我想我非常了解这些概念,包括构造函数注入和 setter 注入。

但是,我不确定在以下情况下我会做什么:

假设我有一个具有许多方法的类,但其中只有一个方法需要某个其他对象。如何将此对象提供给该方法?我是否应该像这样直接将对象作为参数传递给方法:

另一种选择是将它提供给整个班级,这似乎没有必要。像这样:

什么时候应该将对象传递给方法,什么时候应该通过构造函数/设置器使用依赖注入?何时使用这两个选项之一是否有经验法则或最佳实践?

提前感谢您的帮助。