如果一个对象认识很多它的所有者,这是一种代码味道吗?

发布于 2024-10-15 13:15:28 字数 1431 浏览 1 评论 0原文

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

别忘他 2024-10-22 13:15:28

根据这里提供的描述,我认为这是轻微的气味。然而,它似乎很容易修复。

我倾向于将 dmReportBaseData 对象传递到任何需要它的组件的构造函数中。这使得契约在编译时变得清晰,而不是像您当前那样在运行时强制执行。

就目前情况而言,您执行的合同比其需要的更强大。虽然 TRBTempDatabase 仅需要 dmReportBaseData 实例,但只有当它可以从 TdmRBReport 报表对象获取该实例时,它才会起作用。

进行此更改还可以让 TRBTempDatabaseTdmRBReport 分离并仍然成功运行。正如@Lieven 在评论中指出的那样,这可能会使测试变得更容易。

On the description presented here I regard this as mildly smelly. However, it seems easy to fix.

I'd be inclined to pass the dmReportBaseData object into the constructor of any component that needs it. This makes the contract clear at compile time rather than enforcing it at runtime as you currently do.

As it currently stands, the contract you enforce is stronger than it needs to be. Although TRBTempDatabase only requires a dmReportBaseData instance, it will only function if it can get that instance from a TdmRBReport report object.

Making this change would also allow TRBTempDatabase and TdmRBReport to have a divorce and still function successfully. And as @Lieven points out in the comments, this would likely make testing easier.

堇年纸鸢 2024-10-22 13:15:28

如果您在基类中所做的只是维护对父对象的引用,那么不,这不是代码味道,而是完全合法的使用。您可以显式设计一个基类来携带有关“稍后可能出现的内容”的信息。

如果基类依赖于派生类的某些特征,而派生类本身并不存在(即广义类依赖于其子类之一的专门化),那么是的,这可能有点奇怪。

If all you're doing in a base class is maintaining a reference to a parent object then no, it's not code-smell, it's a perfectly legitimate use. You can explicitly design a base class to carry information about "something that might come later."

If the base class is relying on some characteristic of the derived class that isn't present in itself (i.e. the generalized class relies on a specialization of one of its children) then yeah, that might be a bit funky.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文