在Spring中,我有一个控制器,一个服务接口,提供该控制器可以访问的方法。控制器调用服务的各种实现方法。
在scala中实现相同的'设计分离'是正确的实现: 定义scala控制器,定义充当服务接口的scala特征。定义一个扩展此特征的新类,并提供服务的实现。然后控制器将实例化这个新类并调用服务方法的各种方法实现。
这是一个好的设计还是Spring MVC如何在实践中使用?
答案 0 :(得分:0)
“好的设计”是非常主观的,“好的设计”的含义随着时间的推移而变化。大多数人认为有一些事情是最佳实践,但即使是最佳实践也存在冲突。我个人认为,程序员应该继续学习这些最佳实践,更重要的是继续塑造他的代码,直到它达到最佳状态。然而,这一点,随着程序员不断学习,“最佳”形状不断变化。
我无法告诉你在你的情况下“好的设计”设计是什么,因为我不知道情况。最重要的是,我不是你,所以我的“好设计”对你来说并不是最好的。我建议你在一些问题的帮助下自己找到它:
答案 1 :(得分:0)
正如其他人评论的那样,“好的设计”是一个灵活的概念,取决于其他因素。我不会添加那个讨论,而是提供我们的方法的概述。
我们从传统的Java& Spring webapp,虽然我们选择了Jersey而不是Spring MVC。后来,我们在Scala中进行了记录,结果很好。我们故意保持类似Java的风格Scala - 这可能被视为不酷,但它运作良好,很容易培养新同事。
然后我们决定放弃Spring,以及它的XML和传递依赖的整个shebang。这很简单,因为我们已经拥有一组服务和控制器,这些服务和控制器都是带有构造函数注入依赖项的类(当然所有TDD)。我们所要做的就是编写一个新的Bootstrap类来实例化服务和控制器,在每个构造函数参数列表中提供必要的具体类。方便的是,Bootstrap类本质上是原始Spring连接到(非常简单)Scala的音译。应用程序启动时,将从web.xml启动Bootstrap类。 (使用Pico Container的任何人都会熟悉这种方法。)
在我们的案例中,我们不需要在服务层中使用很多特征;由TDD驱动的混凝土类的清洁设计就足够了。但是,如果必要的话,我们的方法也适用于服务的可插拔抽象。
现在我们有一个除了web.xml之外没有XML的webapp,纯粹在Scala中,所以它易于导航和修改,并且外部依赖性更少。这对我们来说非常有效。