高手组合 Scala整合Spring框架

发表于:2011-2-18 10:42

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:张龙 译    来源:51Testing软件测试网采编

  所谓trait就是可以包含实现的接口。它类似于C++中多继承的概念,但却没有众所周知的diamond syndrome副作用。通过将DAO代码封装到trait中,该DAO trait所提供的所有持久化方法可自动为所有实现类所用。这种方式完美地诠释了DRY(Don’t Repeat Yourself)准则,因为持久化逻辑只实现一次,在需要的时候可以多次混合到领域类中。

  对于该示例应用来说,其DAO trait如下代码所示:

  • trait JpaPersistable[T] extends JpaDaoSupport  {  
  •    def getEntity:T;  
  •  
  •    def findAll():List[T] = {   
  •         getJpaTemplate().find("from " + getEntityClass.getName).toList.asInstanceOf[List[T]]     
  •    }  
  •  
  •    def save():T = {  
  •        getJpaTemplate().persist(getEntity)  
  •        getEntity  
  •    }  
  •  
  •    def remove() = {  
  •        getJpaTemplate().remove(getEntity);          
  •    }  
  •         
  •    def findById(id:Serializable):T = {  
  •         getJpaTemplate().find(getEntityClass, id).asInstanceOf[T];  
  •    }  
  •    //…more code omitted for readability        
  • }
  •   作为一个传统的DAO,该trait继承了Spring的JpaDaoSupport,但它并没有提供save、update和delete方法(这些方法需要接收一个实体作为参数)转而定义了一个抽象方法getEntity,需要持久化功能的领域对象得实现这个方法。JpaPersistable trait在内部实现中使用getEntity来保存、更新和删除特定的实体,如下代码片段所示。

  • trait JpaPersistable[T] extends JpaDaoSupport  {  
  • def getEntity:T  
  •         
  • def remove() = {  
  •    getJpaTemplate().remove(getEntity);          
  • }  
  • //…more code omitted for readability  
  • )
  •   实现该trait的领域对象只需实现getEntity方法即可,该方法的实现仅仅是返回一个自身引用:

  • class Person extends JpaPersistable[Person] with java.io.Serializable {  
  •  
  •   def getEntity = this 
  •   //…more code omitted for readability  
  • }
  •   这就是全部了。所有需要持久化行为的领域对象只需实现JpaPersistable trait即可。最后我们得到的是一个包含了状态和行为功能完善的领域对象,完全符合纯粹的OO编程的理念:

    Person(“Martin Odersky”).save

      无论你是否为纯粹的OO理念的拥护者,这个示例都阐释了Scala(尤其是traits概念)是如何轻松实现纯粹的OO设计的。

      结论

      本文示例介绍了Scala与Spring是如何实现互补的。Scala简明、强大的范式(比如函数与特征)再结合Spring的依赖注入、AOP和Java AP为我们I提供了更广阔的空间,相对于Java代码来说,Scala的实现更具表现力、代码量也更少。

      如果具有Spring和Java基础,Scala的学习曲线非常低,因为我们只需要学习一门新语言就行,无需再学大量的API了。

      Scala和Spring所提供的众多功能使得这一组合成为企业采用Scala的最佳选择。总之,我们能以极低的代价迁移到更加强大的编程范式上来。

    77/7<1234567
    《2023软件测试行业现状调查报告》独家发布~

    关注51Testing

    联系我们

    快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

    法律顾问:上海兰迪律师事务所 项棋律师
    版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
    投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

    沪ICP备05003035号

    沪公网安备 31010102002173号