- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在阅读 R. Martin 和 M. Martin 所著的 C# 中的敏捷原则、模式和实践,他们在他们的书中建议,将所有接口(interface)保存在一个单独的项目中,例如。 接口(interface)。
例如,如果我有一个 Gui 项目,其中包含我所有的自定义 Gui 类,我会将它们的接口(interface)保留在 Interfaces 项目中。具体来说,我在 Gui 中有一个 CustomButton 类,我会在 Interfaces 中保留 ICustomButton 接口(interface)。
优点是,任何需要 ICustomButton 的类都不需要引用 Gui 本身,而只需要引用重量轻得多的 Interfaces 项目。
此外,如果 Gui 项目中的类发生更改并因此导致重建,则只有直接引用 CustomButton 的项目需要重新编译,而引用 ICustomButton 的项目可能保持不变.
我理解这个概念,但看到一个问题:
假设我有这个界面:
public interface ICustomButton
{
void Animate(AnimatorStrategy strategy);
}
如您所见,它引用了 AnimatorStrategy,这是一个具体的类,因此将位于不同的项目中,我们称它为 Animation。现在界面工程需要引用Animation。另一方面,如果 Animation 使用 Interfaces 中定义的接口(interface),则需要引用它。
循环依赖 - “我们来了”。
据我所知,这个问题的唯一解决方案是,接口(interface)中定义的所有方法都采用本身就是接口(interface)的输入。尝试实现这一点很可能会产生多米诺骨牌效应,并且即使是最基本的类也很快需要实现一个接口(interface)。
我不知道我是否愿意在开发中处理这种开销。
有什么建议吗?
最佳答案
谨防总是、永远和从不 - 尤其是几乎所有、没有或每一个。
您是否应该总是将所有接口(interface)放在一个单独的程序集中?不 - 不一定。
您是否应该放置您希望代码的外部使用者实现的接口(interface) - 可能。如果您希望项目中的多个程序集依赖它们,我会将接口(interface)放入外部程序集 - 这有助于打破耦合依赖性。我还使用这种做法来解决循环引用问题,其中程序集需要了解彼此之间的接口(interface)。
我不会将仅在项目内部使用的接口(interface)放在单独的程序集中。当我的项目相对较小时,我也不会将接口(interface)提升到它们自己的程序集中 - 或者接口(interface)不打算在没有依赖它们的程序集的情况下使用。
至于您提供的示例 - 我建议您考虑不要从接口(interface)引用系统中的类。只要有可能,我都会尝试让接口(interface)只引用其他接口(interface)——这样可以使事情相对解耦。您无法始终实现这一点 - 因此当您拥有这些类型的接口(interface)时 - 您必须将它们与它们所依赖的程序集保持在一起。
如果您决定将接口(interface)放入一个单独的程序集中 - 您不必将它们全部放入一个程序集中。您可能希望按预期用途将它们分解 - 这样消费者就可以只引入与特定功能领域相关的界面。
关于c# - 组织界面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1137645/
我是一家小型非营利组织的技术总监,我们正在制作一个新网站。我们提出了几个不同主页设计的模型,需要接收董事会成员的意见。是否有在线应用程序/程序/框架可以接收和组织用户评论?我正在寻找允许在查看页面时发
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 4年前关闭。 Improve thi
我阅读了很多关于 java 接口(interface)的文章。我知道你可以实现多态性和其他伟大的东西(函数指针等)。我有理论知识,但有一点点或什至没有。我一直在使用很多已经制作好的界面,比如“Runn
已关闭。此问题旨在寻求有关书籍、工具、软件库等的建议。不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以
我正在尝试在 Windows 7 上编写一个 python 脚本来与我的 Wacom Bamboo Pen 数位板交互。 Wacom 建议使用 WinTab API,它工作正常,但不适用于我的应用程序
我正在研究一种远程访问有关 Linux 服务器统计信息的方法,即 conky会显示。 有没有办法与 conky 交互并获取它显示的统计信息?如果没有,您能否推荐一种获取此类统计数据的好方法? (C/C
将所有这些代码包装在 UI: do { } block 中的原因是什么?我在哪里可以获得关于它的明确说明? UI: do { backgroundButton.setImage(UIImage
我需要将 R 连接到某些 C# 应用程序。我安装了 rscproxy_1.3 和 R_Scilab_DCOM3.0-1B5 添加了对 STATCONNECTORCLNTLib、StatConnecto
我正在尝试遍历接口(interface)片段以通过 id 查找我的特定结构并更改属性。 type A struct { ID ID Steps []Step } type Ste
我有两种不同格式的相同界面,一种是键由低破折号分隔的 JSON 格式,另一种是 javascript camelCase 格式: JSON 格式: interface MyJsonInterface
操作系统:Linux。 我正在尝试寻找可能的方法来为我的嵌入式系统实现 Web 界面。 目前有一个外壳(基于文本)和一小组命令用于查询设备。 我是网络开发新手,我的问题是: 我必须使用什么网络服务器?
我正在尝试运行基于 Mechanical Turk Qualtrics 的调查,并且需要一些似乎可以通过 Mechanical Turk API 使用的功能,例如 custom Qualificati
我见过漂亮的 MetroTwit 界面 http://www.metrotwit.com/ ;我想知道使用了哪些 WPF 组件来尝试重现它。 最佳答案 MetroTwit 设计师在这里:) 所有的控件
我有一个小问题。我需要将 Hadoop Web 界面与我们的 Web 应用程序集成。我只需要一个 Hadoop 接口(interface),我们可以在其中运行一些 hadoop 命令,例如 1
假设我有这个 JavaScript 函数: function updateMainBuff(buff) { // do some stuff } 我的
我试图找出一个窗口是否属于当前的虚拟桌面。 我从 winapi 中找到了 VirtualDesktopManager 类,但即使根据 here 它应该位于“shobjidl.h” header 中,当
关闭。这个问题是opinion-based .它目前不接受答案。 想改进这个问题?更新问题,以便 editing this post 提供事实和引用来回答它. 8年前关闭。 Improve this
我的 Tkinter GUI 界面有问题。文本不会在 shell 中打印,但如果将 Entry 放置在第一个 tk 窗口 get() 中,它就可以工作...帮助我吗? 这是我的代码: import o
我有一个在 MATLAB 中实现的随机微分方程组。只有 4 个变量与 Euler-Maruyama 集成,所以没有什么太花哨的......不过,技术细节对于这个问题并不重要。 您建议我如何构建一个 W
对于我创建的插件,我想添加一个网络界面,您可以从中更改设置并执行一些简单的数据操作。此数据操作应通过 sqlquerys 完成。我正在使用 sqlite 数据库,这就是问题开始的地方: 网站(serv
我是一名优秀的程序员,十分优秀!