组件的松耦合

2024-03-18

我创建了一个提供消息、电子邮件和短信的类库(程序集)。该类库定义了一个接口 IMessenger,EmailMessage 和 SmsMessage 类都实现了该接口。

我认为这是一个通用库,它将成为我的基础设施层的一部分,并且可以/可以在任何开发中使用。

现在,在我的应用程序层中,我有一个需要使用消息传递组件的类,我显然想使用我创建的消息传递库。此外,我将使用 IoC 容器 (Spring.net) 来允许我注入我的实现,即电子邮件或短信。

因此,我想针对我的应用程序层类中的接口进行编程,那么我是否需要从我的应用程序层类中引用我的消息类库?

这是否将我的应用程序层类与我的消息类库紧密耦合?

我应该在单独的库中定义接口 - IMessage 吗?

或者我应该做点别的事情?


这完全取决于您对 IMessenger 的未来计划。就我个人而言,我并不认为在同一个程序集中拥有接口以及一些示例实现是一件坏事。如果有人想要提供 IMessenger 的新实现,他们将不得不在另一个程序集中执行此操作,并且在引入您的程序集的过程中,他们将获得 EmailMessage、SmsMessage 等。对于轻量级程序集,我认为这没什么大不了的,因为它可以节省您每次想要使用“接口”和“实现”程序集时都引用它们的精力。

如果您的实现类引用与您的组织相关的其他代码或您不想公开的任何内容,那么将 IMessenger 分离到其自己的程序集中并根据需要进行分发会更有意义。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

组件的松耦合 的相关文章

  • C++/CLI 在运行时显式加载托管 DLL(相当于非托管的 LoadLibrary)

    问题一 有没有办法在 C CLI 中在运行时而不是在编译时显式加载库 目前我在编译时使用 NET 添加引用 我想显式加载托管 dll NET 中是否有 LoadLibrary 的等效项 Update 感谢兰多夫 Assembly LoadF
  • 如何向 addrange select 语句添加异步“await”?

    我有一个这样的函数 public async Task
  • 无法从 Web api POST 读取正文数据

    我正在尝试从新的 Asp Net Web Api 中的请求中提取一些数据 我有一个像这样的处理程序设置 public class MyTestHandler DelegatingHandler protected override Syst
  • C# datagridview 列转入数组

    我正在用 C 构建一个程序 并在其中包含一个 datagridview 组件 datagridview 有固定数量的列 2 我想将其保存到两个单独的数组中 但行数确实发生了变化 我怎么能这样做呢 假设一个名为 dataGridView1 的
  • 操纵 setter 以避免 null

    通常我们有 public string code get set 如果最终有人将代码设置为 null 我需要避免空引用异常 我尝试这个想法 有什么帮助吗 public string code get set if code null cod
  • C#中Enum中定义的value__是什么

    What value 可能在这里 value MSN ICQ YahooChat GoogleTalk 我运行的代码很简单 namespace EnumReflection enum Messengers MSN ICQ YahooChat
  • 如何访问窗口?

    我正在尝试使用其句柄访问特定窗口 即System IntPtr value Getting the process of Visual Studio program var process Process GetProcessesByNam
  • System.IO.Compression 和 ZipFile - 提取并覆盖

    我使用标准 VB NET 库来提取和压缩文件 它也可以工作 但是当我必须提取并且文件已经存在时 问题就出现了 我使用的代码 Imports Imports System IO Compression 崩溃时我调用的方法 ZipFile Ex
  • 新的 .NET 6 控制台模板中的 C# 函数重载不起作用

    我在尝试重载该函数时遇到错误Print object in the 新的 NET 6 C 控制台应用程序模板 https learn microsoft com en us dotnet core tutorials top level t
  • 如何将数据插入 Microsoft Access 数据库?

    我正在尝试将数据插入 Microsoft Access 数据库 我将数据插入到 Access 数据库中 但只有第一次和第二次显示我插入的数据 当我重建应用程序时 我插入的数据消失了 我不知道他们去了哪里并且没有出现 我使用 C 和 NET
  • 从 python 中的类调用函数 - 不同的方式

    EDIT2 谢谢大家的帮助 编辑 添加 staticmethod后 它可以工作 但是我仍然想知道为什么我在这里遇到类型错误 我刚刚开始使用 OOPS 并且对它完全陌生 我有一个非常基本的问题 关于从类中调用函数的不同方式 我有一个 test
  • 有人有 Postsharp 制作经验吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • .NET Core Azure WebJobs 不从 Azure 应用程序设置读取

    I have an app service running with it s respective ConnectionString from Azure Portal The ConnectionString is point to A
  • 编译时和运行时转换 C#

    我想知道为什么 C 中的某些强制转换会在编译时进行检查 而在其他情况下则将责任转嫁给 CLR 如上所述 两者都是不正确的 但处理方式不同 class Base class Derived Base class Other static vo
  • .NET 有 Base64Stream 吗?

    如果我想生成 Base64 编码的输出 我该如何在 NET 中做到这一点 我知道从 NET 2 0 开始 就有了IC加密转换 http msdn microsoft com en us library system security cry
  • WCF - 如何增加消息大小配额

    我有一个 WCF 服务 它将 1000 条记录从数据库返回给客户端 我有一个 ASP NET WCF 客户端 我在 asp net Web 应用程序项目中添加了服务引用来使用 WCF 当我运行客户端应用程序时 我收到以下消息 传入消息的最大
  • 如何从对Web服务发出的请求中获取客户端IP地址

    我的 IIS 中托管有一个 Web 服务 当客户端直接使用我的服务时 我需要找出客户端 IP 地址 like http MyIpAddress MyApplication MyWebServiceClass asmx http MyIpAd
  • “为 .Net 1.1 生成 Web 服务代理的任何工具”

    我有一个 WSDL 文件 其中包含指向外部 XSD 的链接 我也将 xsd 部署到了正确的相对路径 因为它在 WSDL 中是引用的 当我尝试使用 VS 2003 Net 1 1 wsdl 工具 生成代理时 代理未生成 然而它在 VS 200
  • PowerShell 找不到过载

    我正在尝试使用https sshnet codeplex com https sshnet codeplex com 允许 PowerShell 脚本将文件上传到 SFTP 服务器 一切似乎都有效 除了找不到该方法的重载UploadFile
  • C#“var”关键字在 VB.NET 中的等价物是什么?

    例如 我如何获得 VB NET静态类型局部变量是static赋值右侧的表达式的类型 像这样 Dim http msdn microsoft com en us library 7ee5a7s1 aspx我的变量 3 你还需要 选项推断 ht

随机推荐

  • React.js - 使用 svg 线性渐变不起作用

    我有一个圆圈和一个渐变来填充它 我放入渐变并按样式填充在路径中调用他 import React PropTyoes from react import connect from react redux import as Actions f
  • 是否可以使用页面对象为多个类似屏幕创建可重用且通用的 Specflow 步骤定义?

    我正在开发一个具有许多类似数据表 CRUD 屏幕的应用程序 我使用带有页面对象模式的 Selenium 在应用程序中进行导航 并使用对象母体来创建预定义的测试数据 特别是对于具有许多输入的表单 在编写功能文件时 我突然想到这些测试彼此非常相
  • 哪个 JavaScript 框架可以搜索 CSS 样式表规则并编辑其属性?

    问题 Which JavaScript 框架 原型 script aculo us Mootools MochiKit 不错的 CSS 规则编辑支持 这是关于改变风格规则 我希望有动态 CSS 类哪个改变 例子 现在 通过 JavaScri
  • 如何在 iOS 4.0+ 中获取 UIImage 的大小(以字节为单位)?

    我正在尝试从照片库或相机中选取图像 委托方法 void imagePickerController UIImagePickerController picker didFinishPickingImage UIImage image edi
  • d3.js:放大点击事件

    我试图得到同样的行为威尔林森的实施 http bl ocks org linssen 7352810但在 d3 js 版本 4 上 我对版本 4 中的 Zoom api 感到很困惑 我在原始实现中所做的更改是 zoom translate
  • 用于分隔 Excel 工作表的多个数据框列表

    我有一个可变长度的数据框列表 我想将每个数据框列表转换为每个 Excel 工作表 这是我的代码 for i in range 1 len dfs frames sheetName i dfs i for sheet df in frames
  • AlertDialog 不显示列表上的分隔线

    我有这门课 public class PageDetailInfoView extends FrameLayout few constructors and methods method to show an AlertDialog wit
  • GradleWorkerMain 内存不足错误

    我正在尝试对基于 ant 的 Netbeans RCP 项目进行 gradle 并发现奇怪的 gradle 行为 我用探查器进行了一些观察并得到了下一个结果 环境配置 Gradle 1 9 Build time 2013 11 19 08
  • include_directories 用于导入库

    我正在用 c 编写项目 并且在 cmake 中导入库时遇到问题 正在导入的第三方库不会传播包含目录 根目录 CMakeLists txt Top level CMakeLists txt cmake minimum required VER
  • OpenMp 根据变量设置并行循环的线程数

    有没有办法根据变量的值设置 OpenMP 并行区域的线程数 最初 整个应用程序的线程数 nofCores 在我的 AMD FX 8350 上 nofCores 8 对于这个区域 如果变量是 3 那么我只需要 3 个线程 如果变量 gt 核心
  • Twitter“无法验证您的身份”错误

    我正在使用 Rails 应用程序的 twitter gem 这样我就可以将我的博客文章自动更新到我的 twitter feed 上 我跟着gem 自述文件说明 https github com sferik twitter 将其放入 con
  • 有什么方法可以从内部函数中退出外部函数吗?

    在 PHP 中 如果我有一个函数调用另一个函数 有没有办法让被调用函数退出调用者函数而不杀死整个脚本 例如 假设我有一些类似的代码 p This is some text After this text I m going to call
  • 如何在seaborn catplot中旋转xticklabel

    我无法在 Seaborn Matplotlib 中旋转我的 xlabel 我尝试了很多不同的解决方案 但无法修复它 我在 stackoverflow 上看到了很多相关问题 但它们对我不起作用 我当前的绘图如下所示 但我希望 xlabel 旋
  • Django 检查查询集模型类型的最佳方法

    我有一个 Django 操作函数 我想在基于不同模型的查询集上使用它 检查我的查询集组成的模型类型的最佳方法是什么 假设我想检查 models py 中定义的 Library 类 目前我可以使用它来工作 for object in quer
  • 使用 CreateEvent 创建/打开已存在的事件是否会重置信号?

    如果我使用 CreateEvent 打开一个事件 responseWaitEvent CreateEvent NULL no security TRUE manual reset event FALSE not signaled LPTST
  • 将成员添加到 MailChimp 列表时出现 400 错误请求

    我正在发送一个POST请求以下资源 http developer mailchimp com documentation mailchimp reference lists members 并得到 400 我明白错误意味着什么 http d
  • 如何在标题中仅保留唯一值并在不同行中获取与这些值相对应的值?

    我有一个链接 在该链接中我有一些产品 每个产品中都有一个规格表 该表的第一列应为标题 第二列应为与其对应的数据 每个表的第一列都不同 有一些重叠的类别 我想要一张大表 其中包含所有这些类别 并且按行排列不同的产品 我能够获取一张表 一种产品
  • Android 使用 AccountManager 添加帐户

    大家好 我正在尝试使用 androids accountManager 添加帐户 我不断收到下面的堆栈跟踪 伙计们 我无法发布我的所有代码 因为我打破了 Stack Overflow 允许我输入的限制 因此 我只会发布您请求的代码片段 因为
  • 通过 ASP.NET Web API 有效使用 async/await

    我正在尝试利用async await我的 Web API 项目中的 ASP NET 功能 我不太确定它是否会对我的 Web API 服务的性能产生任何影响 请在下面找到我的应用程序的工作流程和示例代码 工作流程 UI应用程序 Web API
  • 组件的松耦合

    我创建了一个提供消息 电子邮件和短信的类库 程序集 该类库定义了一个接口 IMessenger EmailMessage 和 SmsMessage 类都实现了该接口 我认为这是一个通用库 它将成为我的基础设施层的一部分 并且可以 可以在任何