代码之家  ›  专栏  ›  技术社区  ›  Ryan Emerle

春天是一座荣耀的工厂;这可以接受吗?

  •  8
  • Ryan Emerle  · 技术社区  · 16 年前

    我刚刚继承了一个Java应用程序,在检查代码后,我看到了IMHO是Spring框架的一个巴斯德化。你看,Java团队似乎对接口很反感,所以我们最终的结果是这样的:

    @Autowired
    private SomeConcreteFinalClass _myField;
    

    没有Spring配置,没有定义bean,也不可能单独测试包含的对象。这本质上是一个基于注释的工厂,其开销为Spring。

    队里的其他人 我认为这是完全可以接受的。

    编辑 在许多情况下,这些带注释的工厂出现在复杂的处理类中,这将从隔离测试中获得巨大的好处。不过,该团队也不赞成进行测试。

    我希望这里没有什么神秘之处。如果我有一个具体的类,它不在接口后面,并且没有相应的Springbean来“设置”对象,那么它无疑是一个美化的工厂,可以用10行代码实现。

    我现在的目标是:

    • 制定测试政策
    • 教育 团队成员将讨论组件的优点
    • 移动这些自动连线字段 接口后面

    我想最后一个问题是:如果我们不进行测试或以任何其他方式利用框架,保持这些字段自动连接是否有任何好处。我还是 new 如果依赖项是不可变的,则返回该对象。

    4 回复  |  直到 16 年前
        1
  •  4
  •   Elie    16 年前

    我同意你的观点,这是对Spring所能做的(与Spring应该做的相反)的滥用。设计应用程序的人就是这样吗?听到他们以这种方式构建应用程序的理由会很有趣。

        2
  •  4
  •   erickson    16 年前

    这当然限制了可能性,但也不是完全浪费时间。

    因为所讨论的类型是 final ,它不能很容易地模拟出来进行单独的测试。

    接口 过度使用;这可能是对此的回应。我认为,从许多类型的最终的、具体的类开始,然后使用现成的重构工具在以后确定特定需求时提取接口,这在许多上下文中都是站得住脚的。

        3
  •  1
  •   oxbow_lakes    16 年前

    main 方法,这样您就不会依赖于Spring。

    是的,我同意不注入接口是没有意义的。我倾向于不做大量的单元测试,但即使如此,我在以后更改实现(或在不同部署中使用不同的类实现,例如集成测试)时也会失去任何灵活性。

        4
  •  1
  •   duffymo    16 年前

    很抱歉,根据您发布的两行代码,我无法判断这是否是对Spring的滥用,我怀疑其他人是否也可以。

    如果您抱怨该对象的静态类型不是接口,那么您可能有道理。但即使是这一点也很难从这一行代码中分辨出来。这真的是一个没有接口的服务或存储库类吗?如果是,我同意。如果不是,我需要知道更多。