WEB开发网
开发学院软件开发Java 演化架构和紧急设计: 利用可重用代码,第 1 部分:... 阅读

演化架构和紧急设计: 利用可重用代码,第 1 部分:代码与设计之间的关系

 2010-05-13 00:00:00 来源:WEB开发网   
核心提示: 在这个版本中,我使用 Gang of Four 的 Command 设计模式,演化架构和紧急设计: 利用可重用代码,第 1 部分:代码与设计之间的关系(5),将样板代码抽象到 wrapInTransaction() 方法, addOrderFrom() 方法现在可读性强多了 — 该方

在这个版本中,我使用 Gang of Four 的 Command 设计模式,将样板代码抽象到 wrapInTransaction() 方法。 addOrderFrom() 方法现在可读性强多了 — 该方法的精华(最深处的两行)现在更明显了。但是,为了达到那种程度的抽象,Java 语言附加了很多技术性的繁琐的东西。您必须理解匿名内联类是如何工作的(Command 子类的内联声明),并理解 execute() 方法的含义。例如,在匿名内联类的主体中,只能调用外部类中的 final 对象引用。

如果用表达性更强的 Java 方言来编写同样的代码,结果会怎样?清单 3 显示用 Groovy 重新编写的同一个方法:

清单 3. 用 Groovy 重新编写的 addOrderFrom() 方法

public class OrderDbClosure { 
  def wrapInTransaction(command) { 
   setupDataInfrastructure() 
   try { 
    command() 
    completeTransaction() 
   } catch (RuntimeException ex) { 
    rollbackTransaction() 
    throw ex 
   } finally { 
    cleanUp() 
   } 
  } 
  
  def addOrderFrom(cart, userName, order) { 
   wrapInTransaction { 
    add order, userKeyBasedOn(userName) 
    addLineItemsFrom cart, order.getOrderKey() 
   } 
  } 
} 

该代码(特别是 addOrderFrom() 方法)的可读性更强。 Groovy 语言包括 Command 设计模式;Groovy 中任何以花括号 — { } — 括起来的代码自动成为一个代码块,可通过将左、右圆括号放在存放代码块引用的变量之后执行。这个内置模式使 addOrderFrom() 方法的主体可具有更强的表达性(通过减少晦涩的代码)。Groovy 还允许消除围绕参数的一些括号,从而减少干扰。

上一页  1 2 3 4 5 6 7  下一页

Tags:演化 架构 紧急

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接