问题标签 [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.
architecture - 从 SOA 中的编排层调用服务?
面向服务的架构原则网站说服务组合是 SOA 中的一个重要内容。但是服务松散耦合也很重要。
这是否意味着“编排层”应该是唯一允许调用系统中服务的层?
据我了解 SOA,“编排层”将所有服务“粘合”到一个软件应用程序中。我试图在 Fig.A 和 Fig.B 上描述这一点。
两者的区别在于,在 Fig.A 中,应用程序是由服务组成的,所有的逻辑都在“编排层”中完成(所有对服务的调用都只在“编排层”中完成)。在图 B 中,应用程序由服务组成,但一个服务调用另一个服务。
图 B 中的架构是否违反了 SOA 的“服务松耦合”原则?SOA 中的服务可以调用另一个服务吗?更一般地说,在服务松散耦合、抽象、可重用性、自治等方面,图 A 上的架构能否被认为优于图 B 上的架构?
我的猜测是 A 架构更加通用,但它可以在“编排层”和所有被调用的服务之间添加一些不必要的数据传输。
c - 在保持松散耦合的同时保留对象
我在微控制器中处理一个项目,我需要保留一些设置。假装这是一个 iPod。我需要保存各种设置,如CurrentSongPlaying
、CurrentVolume
等,以便再次打开时可以恢复这些设置。我遇到的麻烦是将我所有的非易失性设置存储在一个结构中是有意义的,我可以从内存中序列化/反序列化,但是如果没有类执行,我无法找到一种方法来实现这一点来自非易失性存储器的序列化/反序列化,包括每个包含需要保存以获取大小/类型信息的设置的类。是否有某种设计模式可以让我将所有这些设置保存到内存中,而不必知道我正在保存什么?
javascript - 如何协调 Javascript 库中的 DRY 和松散耦合?
我正在构建自己的 JS 库;
这个想法是该库应该由小的独立模块和一些稍大的实用程序组成,主要用于消除浏览器的差异。
我无法完成任何事情,因为我无法在保持干燥或松散耦合之间做出决定。
一个例子?鉴于:
- 一个小型库,负责从模板生成 dom 元素
- 另一个处理鸭子类型问题(is_function,is_array ...)
- 最后一个创建模态框。最后一个需要:
- 一些类型检查
- 将仅使用模板库中的一个函数创建模态
我对模态框库的选择:
- 100% 干燥,并且依赖于另外两个库。但这意味着,如果您是只想下载模态框库的用户,则必须与另外两个
- 允许用户在启动时传递一个选项对象,以允许他们指定所需的功能;默认为库中的那些。这更好,但实际上,在 90% 的情况下,这仍然意味着使用提供的库,因为创建具有相同签名的函数可能很麻烦。此外,它增加了模态框代码的复杂性。
- 100% 松散,并重现我的模态框库中所需的功能;可能更有效,因为更有针对性,并且不需要检查边缘情况;但是:任何错误都必须在两个地方修复,并且我的下载大小会增加。
所以我浪费时间在两个极端之间摇摆不定,重构一百万次却从未满足。
我本来想问一个更通用的问题,但后来我意识到它确实与 JS 有关,因为它涉及到大小和性能问题以及广泛使用。
在这种情况下是否有任何已知的模式可以遵循?什么是公认的方式来解决这个问题?欢迎任何想法。
[编辑:]
这是我发现的唯一一篇说明我的担忧的文章。正如文章所说,
DRY 很重要,但 [...] 低耦合和高内聚也很重要。[...] 您必须考虑所有 [原则] 并权衡它们在每种情况下的相对价值
我想在这种情况下我无法衡量它们的价值。
c# - 如果接口的实现调用 Dispose,它是一个泄漏的抽象吗
考虑这段代码:
我们现在想要重构它以松散耦合它。我们最终得到了这个:
看起来不错吧?现在任何实现都可以使用该接口,一切都很好。
如果我现在说实现是一个 WCF 类,并且重构完成之前的 using 语句是有原因的,那该怎么办。即/关闭 WCF 连接。
所以现在我们的接口必须实现一个Dispose
方法调用,或者我们使用工厂接口来获取实现并在其周围放置一个 using 语句。
对我来说(虽然对这个主题很陌生),这似乎是一个有漏洞的抽象。我们不得不将方法调用放在我们的代码中,只是为了实现处理东西的方式。
有人可以帮助我理解这一点并确认我是对还是错。
谢谢
configuration - Lua:我可以使用“require”作为依赖注入的一种形式吗?
我正在设计一个医院集成系统,它使用来自不同医院(我们的客户)的数据,然后根据从数据库读取配置将特定的业务规则应用于所述数据。如果我使用 Java,我的第一直觉是构建一系列代表各种业务规则的接口,然后注入具体实例(使用 Spring/guice)来组成一个完全配置的对象。这将使我能够在配置逻辑(哪些 biz 规则应该适用于 Hospital Foo?)和实际业务规则本身之间实现清晰的分离。
不幸的是,我没有使用 Java,我使用的是 Lua。在过去的几天里,我沉浸在 Lua 文献中,与 DI 最接近的模拟似乎是模块的使用。此外,管理如何在运行时解析 lua 模块的规则似乎完全基于询问本地文件系统。
“模块模式”是实现我所追求的最佳/唯一方法(将配置逻辑与 biz 逻辑分离)?如果是这样,如何利用 Lua 的模块加载规则来改变在运行时加载的实际模块?
c# - 根据业务规则选择服务实现
在我正在处理的应用程序中,我们有在将新实体添加到存储库时触发的操作。其中一项新操作应该是使用服务(如服务层,而不是以太网中的某处的 Web 服务)在对象进入时执行一些业务规则操作。
这一切都很好,但应该使用的确切服务将根据我们正在操作的实体的属性而有所不同(基本上,基于实体与哪个客户相关)。我想让动作与它可能需要调用的服务风格保持松散耦合。
我正在考虑做的是实现一个接受实体并返回正确服务的工厂。不过,这似乎有点笨拙。有没有更好的方法来设置它?
我曾考虑在运行时使用 IoC 容器来确定正确的实现,但快速阅读一对(Ninject 和 Windsor)似乎并不表明它们非常适合这种操作。
c# - C#中的单位转换设计模式
我需要在单位之间进行转换,每个单位有 2 个部分,它的名称和一个整数,整数部分可以是正数或负数。我需要我的Unit
班级进行依赖注入并松散耦合。例如,如果我将来需要添加一些东西,我不想更改正在使用该类的其他类。
我的单位类中还应该有一种Convert()
方法可以在单位之间进行转换。我看了一下这些链接:
但这些似乎松散耦合。
请让我知道这个问题的推荐设计模式,
c# - 如何让框架和依赖的应用松耦合?
我有一个具体案例,我想知道best practice
如何处理它。
我制作了一个特定的 .NET 框架(Web 应用程序)。此 Web 应用程序通过以下方法对许多其他 Web 应用程序起到平台或框架的作用:
我们在单独的解决方案中创建我们依赖的 Web 应用程序(项目业务的类、rdlc 报告),然后构建它们。
之后,我们在框架中添加对生成的 dll 的引用。
并创建一组用户控件(每个依赖的 Web 应用程序一个)并将它们放在它自己的框架中的一个文件夹中。
它可以正常工作,但是对特定用户控件的任何修改或对任何一个相关 Web 应用程序的任何修改。我们必须再次添加引用并发布整个框架!
我想做的是使那些不同的 web 应用程序和框架松散耦合。所以我可以只发布一个框架,并且对用户控件或不同的 Web 应用程序的任何修改只发布更新的部分而不是整个框架。
如何重构我的代码以便我可以做到这一点?
最重要的是:
如果任何依赖应用程序发生变化,切勿发布整个框架,只需发布属于该应用程序的更新部分。
java - 设计模式 - 事件或直接引用
假设我们有一个使用 MVP 设计的 Java 应用程序,其页面显示一些独立的模块。除其他外,我们将考虑应用程序中的两个独立 MVP 模块。应用程序中有一项功能需要上述模块进行通信。这些模块提供专门用于该功能的接口 (API) A 和 B。还有管理器 (M) 来处理此功能的逻辑。管理器可以遍历(或使用某些上下文)页面来获取对应该参与所考虑功能的模块的引用。
下面的 Manager 代码片段展示了我正在考虑的方法:
通过 EventBus 使用异步事件
/li>使用直接引用
/li>
问题是:
可以使用 EventBus 进行对象之间的常规通信(检查条件、返回值等)吗?或者最好只将事件模式用于真实事件(我的意思是通知订阅者发生了某些事情)?遵循第二种方法是否反对松耦合?也许其他一些模式会更合适?
直觉上,第二种方法对我来说更干净。
wcf - WCF NetTcp 绑定会增加耦合吗?
目前,我们已经使用 SOAP 或更简单的 HTTP REST-like 方法创建了 Web API。同时有多种方法可以让服务器和客户端或多或少地独立发展,我认为这是一个很大的优势。
主要缺点之一是使用 HTTP 会产生一些开销。我们计划增加使用服务 API 来公开数据,而不是应用程序直接访问数据库。我们担心使用 HTTP 会涉及太多开销,这会增加延迟。当然我们可以使用缓存,但这也会增加复杂性。
建议之一是使用 WCF NetTcp 绑定,它的性能应该更高。我担心如果我们选择这项技术,我们可能会失去 REST 的好处:独立发展服务器和客户端的能力。我认为我们将以紧密耦合为代价来提高性能。
我的问题如下:使用 WCP NetTcp 绑定,是否仍然可以在无需更新所有客户端的情况下发展您的 API?换句话说:当使用这个绑定时,我们可以期望客户端和服务器之间的耦合程度如何?