【发布时间】:2011-11-08 23:19:22
【问题描述】:
代码示例是 C#,但这是一个一般的 OO 问题。
我知道根据 OO 规则,应尽量减少类耦合,成员应尽可能保持私有,等等。
考虑这个例子:
您正在编写一个深奥的程序,该程序具有某种数据集(我不是在谈论 System.Data.DataSet),该数据集实际上用于程序的各个方面。事实上,程序的存在基本上只是为了加载、显示、操作和保存数据集。此外,任何时候都只能加载一个数据集,并且在程序打开时加载。
如果我们严格遵守 OO 规则,我们就会有
public void ShowSomeGraphs(IData data)
{
// do stuff with data which implements IData
}
但是,例如,我们可能会将public static Data 成员存储在Program 中。
public void ShowSomeGraphs()
{
// do stuff with Program.Data
}
一方面,我们用更短的函数签名换取了大大增加的类耦合。另一方面,我们不再将 Data 参数传递给实际上 every 函数,everywhere。
正确的答案可能是:尽可能避免类耦合。本地 Data 变量只是指针,因此内存开销可以忽略不计,而且由于类是解耦的,它们可以在以后在其他地方使用。
虽然现实地说,Data 类的结构在不同的应用程序中可能会有显着的不同,因此您不能直接从该程序中提取一个类,然后将其放到其他地方而不做任何调整。以一种可以直接加入的方式编写类所需的额外时间和精力可能很难向利益相关者证明是合理的。
我现在正在开发这种程序,并且我使用了 OO-canon 方法:在需要的地方传递数据参数我已经最小化了与 IData 接口的类耦合,以便为将来的代码重新概括数据集利用。鉴于应用程序,我几乎可以肯定这段代码永远不会被重用。如果没有这些额外的接口和抽象,就最终用户而言,该程序的工作方式将完全一样,但对我来说会大大减少头痛和开发时间。
您对此有何看法?您认为花费所有额外时间编写接口和泛化以确保类在可能的情况下解耦是否合理,尤其是当您以后看不到在其他地方使用的类时?
【问题讨论】:
-
这真的是见仁见智。这是代码风格与时间的问题。程序应该工作,并且尽可能少的错误。代码风格旨在降低复杂性,使代码更易于理解,更适合项目之间的更改和可重用。真的取决于你决定做什么
-
@Ozzah:我在我的答案中添加了一个代码示例,以展示实现单例解决方案是多么快速和轻松,允许您松散耦合以及从客户端代码轻松访问数据接口。跨度>
标签: oop decoupling coupling