问题标签 [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.
asp.net-mvc-3 - 在 ASP.NET MVC3 中,如何在不创建组件之间耦合的情况下获取属于相关 DB 表的数据?
我在 C# 和 Razor 中有一个 ASP.NET MVC3。应用程序的架构分为数据访问层(EF 类 + 存储库)、服务层、控制器、ViewModels 和 View。
我有两个 EF 类Products
(key ProdId
)和ProductCategories
(key ProductCategoryId
)。
他们通过一对多的关系在ProdCatId
类Products
中作为外键和ProductCategoryId
在类中关联ProductCategories
。
当然还有一个从类到的导航属性 。hasCategory
Products
ProductCategories
我的存储库类中有该方法:
现在我想在我的视图中显示所有带有ProductCategoryName
(不是ProdCatId
)对应类别的产品。要在我使用的存储库中访问此信息(productDB 是 EF 类):
为了在我的视图上获得这些信息,我应该使用我的服务层中的这段代码,或者更糟糕的是我的ViewModel中的代码。但是,通过这种方式,我会在想要保持分离的组件(服务层和 EF 或 ViewModel 和 EF)之间创建耦合。
如果我将这个值从我的存储库(方法string GetProductCategory(int ProdId)
)获取到我的服务层,连同GetAllProducts().ToList()
,我将有两个对象:
1) 一个List<Products>
2) 一个string
如何将这些值传递给我的控制器,然后包装在 ViewModel 中?我应该ProductInfo
在包装这些数据的服务层中创建一个类吗?此解决方案创建了Controller、ViewModel和类ProductInfo之间的耦合。
不创建耦合的正确做法是什么?
asp.net-mvc-3 - 在 ASP.NET MVC3 应用程序中,ViewModel 是由服务层填充还是由控制器填充?
我在 C# 和 Razor 中有一个 ASP.NET MVC3。应用程序的架构分为数据访问层(EF 类 + 存储库)、服务层、控制器、ViewModels 和 View。
我的ViewModel公开了一个方法,该方法Fill
接受要在View中显示的数据集合作为参数。为了在组件之间不存在耦合,必须从服务层或控制器Fill
调用该方法?
c# - 如何从服务层访问 EF 类属性
我在 C# 和 Razor 中有一个 ASP.NET MVC3。应用程序的架构分为数据访问层(EF 类 + 存储库)、服务层、控制器、ViewModels 和 View。
从我的服务层ProductServices
,我调用GetAllProducts
我的 Repository 公开的方法ProductRepository
,它具有以下签名:
因此,在ProductServices
我调用 (productRepository
是ProductRepository
) 的一个实例:
填充变量products
。现在我想从 访问产品ProductName
名称productServices
。如果我使用这个指令:
我正在创建ServiceLayer和EF之间的耦合(绕过存储库)。这意味着我必须添加到ProductRepository
带有签名的方法:
但是,由于我的应用程序中需要其他产品信息,我应该为类productRepository
的每个字段创建一个方法Product
吗?我的推理正确吗?谢谢
.net - 子类耦合和 .NET 中的示例
我刚刚读了一篇文章,上面写着:
子类耦合。当一个基类型(通常是类)有许多扩展它的派生类型时,理想情况下,其他类型应该只知道基类型。如果所有子类型共享相同的公共接口(从基类型继承的公共成员,为每个子类中的不同行为覆盖),那么外部“客户”类型可以将它们全部视为基类,就好像它们是基类一样。如果不是这样,如果客户端类型知道存在的子类型的细节,那么这就是子类耦合到所讨论的多态结构。
具体来说,最后一行说“如果客户端类型知道有关存在的子类型的详细信息......”。在 .NET 中,如果我使用WebRequest.Create("ftp://...");
则我知道FtpWebRequest
将返回 an,并且我可以更改特定于FtpWebRequest
子类的属性,例如UseBinary
属性。除非我对 WebRequest 的子类型有特定的了解,否则我将无法做到这一点,所以在我看来,这是一个子类耦合的情况,并且是糟糕的设计。
我很难相信这是代表 .NET 框架开发人员的糟糕设计,而是想象我对上述内容的理解有点偏离。有人能解释为什么我在 .NET 中提供的示例不是子类耦合的示例吗?
events - JSF2中ManagedBeans之间的事件处理机制?
有没有办法以一种可以发送和接收自定义事件的方式将 ManagedBeans 彼此分离——可能是通过(很酷的)FacesContext?!我不想将 Beans 作为 ManagedProperty 注入,以减少直接依赖关系。不幸的是,@ListenerFor 和所有这些新东西只适用于组件和渲染器,而且似乎完全是错误的方法。
熟悉 Adobe Flex 事件机制的人都知道我的意思以及我对标准化 Web UI 框架的期望。
请让我知道一种包含在 JSF 规范中的优雅方式,而无需实现另一个框架。
struts - struts动作类和业务服务层
我在处理服务层上完成的“业务验证”时有一个问题。下面的代码显示了一个典型的账户资金转账示例,验证资金充足,转账金额小于定义的限制。
在此示例中,调用者必须处理和捕获 Action 类中定义的异常,并使用相应的 ActionError 来显示错误消息。
对所有业务验证使用异常是“必须”的吗?
如果我决定不为此使用异常,我将不得不在业务层中定义相应的 ActionError(这违反了耦合/内聚)规则在某种意义上。
应该如何处理由服务层传播回 Action 类的消息?
c# - 初学者需要的减少耦合简单示例
刚从大学毕业,遇到了一些我需要减少耦合的代码。但我并不完全理解所有的概念,并且想要一个简单的例子来帮助我。为了让你开始,我有一个带有单个字段的人员类,名称。我在该类中有一个方法来连接一些文本。
我知道这是一个愚蠢的例子,大多数人永远不会考虑在如此简单的情况下减少耦合,但我只想要一个简单的例子来帮助我完全理解代码和概念。
在主窗口后面的代码中,我放置了一个文本框和一个按钮。当窗口加载时,它会显示人员 x 姓名字段的当前值。单击按钮时,将调用 x.PersonAddText 方法。目前,此示例的耦合计算为 8。按钮单击事件为 3,窗口加载事件为 3。
有什么办法吗,使用这个例子,我们可以将它们中的一个或两个都降低到低于这个值。
以下是我的所有代码:
我的个人类:
我的代码背后:
我的简单 XAML:
我很难理解互联网上解释这一点的教程。据我所知,有 3 种方法可以做到这一点(如果可能的话,将上面的代码转换为所有这三种方法的示例会很好):
- 服务定位器
- 依赖注入
- 控制反转 (IoC)
解释我读过的东西的文章非常好,但这些例子与我无关,因为他正在使用带有数据库连接字符串的 VB 和 ASP.Net。这与我所需要的完全相反,我不想在学习概念的同时考虑如何翻译代码,也不想考虑如何将其应用到相关的东西上。虽然这个例子很好,但它太多了,我真的很感激任何额外的帮助。
编辑历史:更正拼写。添加以下内容以澄清我的问题:
我理解耦合和内聚背后的理论,以及为什么你应该减少一个并增加另一个。但是我们在大学里从来没有编写过任何例子。另外,虽然在大学里没有涉及,但我确实了解接口。但是,我不明白如何使用它们来减少耦合。
添加了我上面引用的文章的链接。
编辑2:到目前为止,我现在得到的是以下内容:
我现在如何在后面的主窗口代码中使用它?我想我应该更换
和
这是正确的吗?如果是,我还需要做什么。我问的原因是因为我仍然没有看到 Visual Studio 报告的代码耦合数字有任何减少(事实上,它在后面的主窗口代码上增加了 1)。
java - java中哪种模式的耦合度较低:将对象传递给方法还是使用组合?
我的问题是:哪种模式的耦合度较低?在现实世界中哪种模式更受欢迎?
linux - 如何在 linux 上提交 R 作业?
我是 R 的工程师新手,并且有一个必须在 linux 上运行的脚本,我进行了很多搜索,但找不到在 linux 上运行脚本的简单命令。我必须将我的工程软件与 R 结合起来,所以我也需要在 linux 上运行它。
请帮助我启动。
最好的祝福。
oop - 高内聚如何帮助我们减少耦合?
承担方法M1
并M2
具有密切相关的职责
第一个例子:
如果
•M1
和M2
在类中定义A
(因此类A
是高度内聚的)
• 类B
用途A.M1
和类C
用途A.M2
然后
•A
与B
和C
类耦合
• 更改 will 的签名 M1
只需要更改 in B
,而不需要更改C
第二个例子:
如果
•M1
在类中定义A1
(因此B
与 耦合A1
)
•与M2
类一起定义A2
(因此C
与 耦合A2
)
然后
• 更改 will 的签名M1
只需要更改 in B
,而不需要更改C
a)据我了解,上一个示例中的类并不比第一个示例中的类更耦合!还是我错过了什么?
b)据我所知,第一个示例中的类比第二个示例中的类更松散耦合,前提是:
我们假设更改 的签名
M1
也需要我们更改 的签名M2
,但我不认为这种情况经常发生?!或者如果两者都
M1
对M2
相同类型的数据 T1 进行操作,那么将 T1 替换为 T2 将需要同时更改M1
和M2
?!或者,如果我们假设由于
M1
并且具有密切相关的责任,那么改变通常需要M2
改变的机会要大得多(即使不直接或间接调用)?!M1
M2
M1
M2
或者,如果我们假设由于
M1
并且具有密切相关的职责,那么某些类需要两者的M2
可能性要大得多(因此在单个类中具有and会减少耦合)?!M1
M2
M1
M2
M1
c) 定义and M2
within A
(而不是定义M1
withinA1
和M2
within )是否有任何其他原因A2
会减少耦合?
注意 - 我知道我们应该拥有高度内聚的模块,因为它更易于维护和可重用
谢谢