【问题标题】:Use of helper/utility methods in a Factory class在工厂类中使用帮助器/实用程序方法
【发布时间】:2009-10-20 23:38:21
【问题描述】:

我有一个关于在工厂类中使用“实用程序/帮助程序”方法的问题。考虑一个表示文档的 XML 字符串示例。我有一个类可以将其转换为“对象”(例如 PDF、Word、CSV 等)。我有一个工厂类(我们称之为 DocumentFactory),它接受这个 XML 字符串并根据某些规则返回正确的文档对象。

我的问题是,就“最佳实践”而言,我可以向 DocumentFactory 类添加“实用程序/帮助程序”方法以帮助确定将返回的对象类型吗?这些助手不仅仅是简单的 if/swtich case 语句。但不要超过 15-20 行。

我在我的代码中也使用了一个私有静态类,并且大约有 4-5 个辅助方法(这些辅助方法是公共的,因为我已经为这些方法编写了测试)。

那么这个设置对于工厂类来说是有效的吗?

【问题讨论】:

    标签: java design-patterns factory


    【解决方案1】:

    不,在工厂中使用辅助方法来帮助决定返回什么样的对象本质上没有错。所有常见的方法相关警告都适用,但没有工厂特定的原因可以避免它们。

    【讨论】:

    • “所有常见的方法相关警告都适用”这些是什么?
    • 没什么花哨的,只要你读过你的 Fowler 就知道了。不要让这些辅助方法膨胀成数百行错综复杂的逻辑,避免在它们之间排序依赖关系,如果您发现自己想在 DocumentFactory 之外使用它们,请将它们重构为自己的类。之类的东西。如果您对它们进行了测试,并且这些测试是全面的,那么您可能没问题。
    • 明白了。我想我应该没事:)
    【解决方案2】:

    这很好。事实上,我想说的是使用辅助方法是首选的方法,因为将你的代码分成尽可能多的re-尽可能使用的方法。您可能应该将这些辅助方法设为私有(并且是静态的,假设工厂方法本身是静态的)。

    【讨论】:

    • 如何测试每个私有辅助方法?
    • 好点。如果您需要测试私有方法,我想最简单的方法是让它们成为封装方法(或者直接将它们公开,尽管这不是首选)并且让测试与工厂类在同一个包中, 但在 test 目录下而不是 src 目录下。
    • 正是我想要弄清楚的。由于实用程序方法是公共的,但不是工厂类的内在(认为高内聚),我正在考虑一个单独的类来保存这些实用程序方法,然后在工厂中使用这个类。然而,我目前的工作场所是陈旧的,甚至这里的开发经理也不知道使用 DI 的想法。如果没有 DI,我会添加不必要的“行李”,所以我选择将它们放在工厂本身。我很高兴在这里最同意这一点:)
    猜你喜欢
    • 1970-01-01
    • 2012-04-05
    • 1970-01-01
    • 1970-01-01
    • 2020-07-27
    • 1970-01-01
    • 2013-10-04
    • 2015-12-07
    • 1970-01-01
    相关资源
    最近更新 更多