Java 将Spring抽象工厂模式转换为scala

Java 将Spring抽象工厂模式转换为scala,java,spring,scala,Java,Spring,Scala,在Spring中,我有一个控制器,一个提供该控制器可以访问的方法的服务接口。控制器调用服务的各种实现方法 要在scala中实现相同的“设计分离”,这是正确的实现方式吗: 定义scala控制器,定义作为服务接口的scala特性。定义一个新类,该类扩展此特性并提供服务的实现。然后,控制器将建立这个新类,并调用服务方法的各种方法实现 这是一个好的设计还是SpringMVC在实践中的应用 “好的设计”是相当主观的,“好的设计”的含义对每个程序员来说都会随着时间的推移而变化。有一些事情是大多数人认为最好的

在Spring中,我有一个控制器,一个提供该控制器可以访问的方法的服务接口。控制器调用服务的各种实现方法

要在scala中实现相同的“设计分离”,这是正确的实现方式吗: 定义scala控制器,定义作为服务接口的scala特性。定义一个新类,该类扩展此特性并提供服务的实现。然后,控制器将建立这个新类,并调用服务方法的各种方法实现

这是一个好的设计还是SpringMVC在实践中的应用

“好的设计”是相当主观的,“好的设计”的含义对每个程序员来说都会随着时间的推移而变化。有一些事情是大多数人认为最好的做法,但即使是最好的做法也有冲突。我个人的观点是,程序员应该继续学习这些最佳实践,更重要的是,继续塑造他的代码,直到它达到适合这种情况的最佳状态。然而,在这一点上,它的“最佳”形状会随着程序员的不断学习而不断变化

我不能告诉你什么是“好设计”的设计是在你的情况下,因为我不知道的情况。最重要的是,我不是你,所以我的“好设计”并不适合你。我建议您通过以下问题自己找到:

  • 你在为谁编程
  • 您的代码将使用多长时间
  • 谁将维护您的代码
  • 您是否希望创建自动测试,并愿意为此更改设计
  • 您是否需要一个以上的原则实现
  • 在这个时候,什么样的风格适合你
  • 代码多久更改一次
  • 你想把未来考虑进去,还是只创造现在需要的东西
  • 您喜欢使用哪些库
  • 你想花多少时间

正如其他人所评论的,“好的设计”是一个灵活的概念,取决于其他因素。我将不补充这一讨论,而是概述我们的做法

我们从一个传统的Java&springwebapp开始,尽管我们选择了Jersey而不是springmvc。后来,我们在Scala中重新编码,进行得很顺利。我们特意保持了Java风格的Scala——这可能被视为不酷,但它工作良好,并且很容易培养新同事

然后,我们决定放弃Spring,以及它的XML和所有可传递依赖项。这很容易,因为我们已经有了一组服务和控制器,它们都是具有构造函数注入依赖项的类(当然都是TDD)。我们所要做的就是编写一个新的引导类来实例化服务和控制器,在每个构造函数参数列表中提供必要的具体类。方便的是,Bootstrap类本质上是原始Spring连接到(非常简单的)Scala中的音译。应用程序启动时,引导类从web.xml启动。(任何使用过Pico Container的人都会熟悉这种方法。)

在我们的例子中,我们不需要在服务层中使用太多特性;由TDD驱动的混凝土等级的清洁设计是足够的。但是,如果有必要,我们的方法也可以很好地用于服务的可插拔抽象


现在我们有了一个webapp,它除了web.XML之外没有其他XML,完全是Scala格式的,因此很容易导航和修改,并且外部依赖性要少得多。这对我们来说非常有效。

是的,我同意你的看法,有一些标准,比如Spring MVC,但由于scala似乎使一些java设计模式变得多余(我想到的是visitor模式Spring)在Scala中实现MVC可能有另一种/更干净的方法如果您想了解人们如何使用Scala做与web相关的事情,您可以查看不同的web框架: