6

不确定标题是否抓住了我在这里想说的。

在 OO 中设计时,我是否应该将我的对象拆分为最具体的区域 - 所以如果我有一个处理创建对象的工厂对象,但后来我遇到了一种为其他目的创建对象的方法,即使它们可能是相同的objects 是否值得创建一个单独的 fcatory 或只是添加到现有的。

我最大的担心是用大量的东西来增加类,或者拆分对象并将我的项目稀释成一大堆类。

有什么帮助吗?

编辑:

我想在旁注/子主题中,我想找出您应该在程序中使用的粒度级别。怎么样,你应该去多低?

4

6 回答 6

4

我最大的担心是用大量的东西来增加类,或者拆分对象并将我的项目稀释成大量的类

这是一个非常有效的观点,在任何规模合理的项目中,都极难提前做好准备,尤其是因为实际上,在大多数情况下,需求本身会随着时间而发展。这就是“重构”的用武之地。您根据您在任何给定点所知道的进行设计,并尽量不要对您认为系统可能发展到什么做出太多的信念飞跃。

鉴于您知道您现在正在构建什么,您设计您的类尝试尽可能地利用 OO 概念 - 例如封装/多态。就像其他人也指出的那样,这本身可能是出了名的难以实现,这就是设计 OO 系统以及领域知识方面的经验真正派上用场的地方。

根据你所知道的进行设计 --> 构建它 --> 审查它 --> 重构它 --> 重新设计 --> 并且它继续......

于 2010-10-29T15:20:11.610 回答
1

找到正确的细节和责任级别是 OOP 设计如此困难的原因。我们可以为您提供特定案例的帮助,但不能为您提供一般性的帮助。如果有解决这个问题的算法或严格的方法,那么每个人都可以成为 OOP 设计者。

于 2010-10-29T15:07:40.737 回答
1

我喜欢用一个经验法则来决定“现在这是否变得太大了?” 是“我能简明扼要地解释它的目的吗?” 如果您开始不得不引入警告和大量狡猾的词来解释设计组件(无论是类、成员变量、方法还是其他)的功能,这可能是一个很好的指标,表明它变得太复杂了,应该拆分.

于 2010-10-29T15:09:11.517 回答
1

在您的特定情况下,如果您已经有一个工厂对象,那么 DRY 原则(不要重复自己)会说创建另一个做同样事情的工厂是个坏主意。

这是您面临的实际问题吗?或者仅仅是担心你的代码将来会如何增长?

于 2010-10-29T15:12:50.487 回答
0

如果您使用相同类型的对象来解决截然不同的问题,那么您可能需要重新设计该类以专注于关注点分离。如果您需要更具体的答案,则需要提供需要此功能的类的示例。


我可能在 Q 中措辞不好。我想我不会重复自己,它只是将代码放置在何处的更多情况,它可以添加到现有工厂中,该工厂创建设计对象以将数据导出到 Excel 电子表格。另一方面,我可以看到它也可以有自己的工厂来导入 excel 数据。两家工厂都会生产相同的物品,但内部运作方式完全不同。——</p>

如果您不做或不打算做任何类抽象(子类化或使用接口),您可能根本不需要使用工厂模式。工厂模式通常最适合提供基类类型的对象或实现特定接口的对象。

于 2010-10-29T15:13:14.353 回答
0

两家工厂都会生产相同的物品,但内部运作方式完全不同。

不确定我是否正确理解了您,但这听起来像是AbstractFactory模式的候选者。

于 2010-10-29T15:28:41.030 回答