InfoQ

新闻

从技术上分离业务逻辑:Kathleen Dollard对于代码生成的新观点

作者 Sadek Drobi译者 朱永光 发布于 2007年12月31日 上午9时56分

社区
.NET,
Architecture
主题
编程,
领域特定语言
标签
BDD,
代码生成

从用户界面代码中分离业务逻辑是老一辈VB程序员教给我们的重要一课。Kathleen Dollard实际上主张业务逻辑应该从任何技术中分离出来,以避免当新技术到来之时重写所有代码。并且,根据Kathleen Dollard的说法,代码就是技术,那么业务知识必须独立存在:

把业务逻辑和任何技术结合在一起注定让我们在获得新技术时要从基础部分重写代码——代码就是技术。

...你不能把代码和业务逻辑结合在一起。

任何闪亮漂亮的小工具和语言都会成为明天的老古董。

业务知识宁可保存在这些地方:“数据库结构、服务契约、测试定义、业务规则、工作流、业务对象编码、验证规则、授权准则、用户界面等等。”然而,人们可能会争辩到,无论我们选择了那个地方来隔离业务信息,它总是基于某项技术——这项技术总是会被改变的。虽然如此,在使用代码“作为表达意图的核心方式”和使用给定语法保存意图的表现之间总是存在一个关键的不同点的

你可以对这些声明识别、分类和确定形态。确实,任何声明的语法都是基于某个以此为目标的技术。...但是,任何元数据所含的价值都可以被转化为其他任何元数据语法。

Kathleen主张的这种方法是,把代码生成作为从代码中提取和分离业务逻辑的一种手段。根据他的实践,她提出“即使最好的常规开发成果都会比平平常常的代码生成开发要差一些”。大部分专业团队使用敏捷方法也能按时成功交付有质量保证的软件,但在Kathleen Dolard的眼里,这样也可能会失败因为“整件事将随着新技术而重新开始。” 

在生成的系统中需要着重强调的一点是,代码依旧扮演着一个决定性的角色。 无法定位错误就是80年代中4GL(译者注:4th Generation Lanuage,第四代语言)灾难的一个原因。生成的代码可以避免这些易犯的错误,因为它实际上是“系统告诉你如何做”,这对于调试而言完全是具有决定性的。因此,Kathleen把代码描述为“必要的邪恶”并认为确实应该这样对待代码生成。 

她强调,这种方式对我们设想中的编程需要一个基本的转变,有效的领导力及适合工具将使代码生成完成的更好。Kathleen论证到,如今“.NET不是一个通过技术的变革来保护你的项目的接种疫苗”。它实际上加速了变革的步骤。然而,已经存在一些广泛使用代码生成的前提条件了。 

在提及用于映射元数据或XML文本的实体框架的时候,Kathleen Dollard说,他们“能让代码生成做令人吃惊的事情”以及具有“代替XSLT用于复杂生成功能”的潜力。Kathleen希望代码生成这个领域在接下来的几年变得更有活力。她相信,基于“一种代码生成的组合方式,无声地为我们编写我们本来需要编写的代码”,可以让我们更接近正确的开发方式。 

查看英文原文:Separating business logic from technology: Kathleen Dollard on a new view of code generation

5 条回复

回复

是好是坏? 发表人 Necromancer B 发表于 2008年1月1日 下午11时14分
hh 发表人 Charlie xia 发表于 2008年1月2日 下午10时23分
元数据本身用什么来描述? 发表人 cao yunfei 发表于 2008年1月3日 上午1时52分
Re: 元数据本身用什么来描述? 发表人 Kevin Chu 发表于 2008年1月4日 上午5时20分
做起来难 发表人 wang Alex 发表于 2008年1月17日 下午11时51分
  1. 返回顶部

    是好是坏?

    2008年1月1日 下午11时14分 发表人 Necromancer B

    作者是讲把业务逻辑用元数据形式来表达,再用code generator生成代码?

    要是用元数据形式表达,那我们岂不要维护一组非常复杂的解析引擎。依旧“强引擎,弱脚本”。

  2. 返回顶部

    hh

    2008年1月2日 下午10时23分 发表人 Charlie xia

    ghuihjk

  3. 返回顶部

    元数据本身用什么来描述?

    2008年1月3日 上午1时52分 发表人 cao yunfei

    用XML?比用代码更丑陋。代码本身就是一种语言。数据库结构、服务契约、测试定义、业务规则、工作流、业务对象编码、验证规则、授权准则、用户界面,这些东东怎么描述呢,归根到底总要用某种语言来描述,可以不是代码,但是必然是某种语言。那么那种语言是否比代码更高效,更容易维护?最根本的问题是,代码和语言有什么本质区别?

  4. 返回顶部

    Re: 元数据本身用什么来描述?

    2008年1月4日 上午5时20分 发表人 Kevin Chu

    作者的本意是把业务规则保存为通用的元数据,不用和具体代码绑定,之后根据技术的更替,可以通过代码生成再次生成具体的代码。
    但是确实存在要维护一套复杂的元数据的问题。老实说,作者的这种主张是基于她的实践的,我并没有这样实践过,所以无法判定她这样方式的优劣。不过确实可以给我们提供一种参考,一种解决技术和业务之间问题的思路。

  5. 返回顶部

    做起来难

    2008年1月17日 下午11时51分 发表人 wang Alex

    说的好像比较容易,但做起来很难。。

独家内容

剖析短迭代

敏捷教练Dave Nicolette提出:我们应该如何设定迭代长度?是要根据发布周期的时间么?使用短迭代又有哪些好处?

应用JSF、Ajax和Seam开发Portlets(1/3)

本文主要讲述了如何用JBoss Portlet Container 和JBoss Portlet Bridge创建新项目,怎样配置一个JSF应用去使用JBoss Portlet Bridge,以及JBoss Portlet Bridge所具备的功能。

AtomServer:数据分发的发布动力(第二部分)

在这篇文章里,Bryon Jacob和Chris Berry将和我们继续探讨AtomServer,它是基于Apache Abdera的完整Atom存储实现。作者还创建了几个Atompub规范扩展,其中包括自动标记、批处理和Feeds聚合。

架构师(试刊第二期)

InfoQ中文站的电子杂志《架构师》试刊第二期出版了!相比于上期,我们在内容的选择安排和版式上都根据读者的意见重新做了修正。“细节决定成败”,我们希望基于InfoQ中文站的专业内容,《架构师》能逐渐成为大家喜欢的电子刊物!

一种正规的性能调优方法:基于等待的调优

在本文中,Steven Haines探讨了Web应用性能调优问题。该领域过去更像是一门艺术而不是一门科学。他提出了一种称为基于等待调优的方法,使整个调优过程更加可度量,也因此更具科学性。

Java程序员ActionScript 3入门

通常来说,改变技术路线时最艰难的部分是辨别语言语法之间的不同。这篇文章就为Java开发者提供了一份如何转向Flex基础语言ActionScript的指南。

浅谈如何创建Rails应用

本视频主要以财帮子为例,介绍了如何创建一个PV为百万级的Rails应用。其中包括:Rails应用的服务器架构、Rails Cache的优化、负载均衡的处理、Web服务器的调试、分布式解决方案、Open API的设计等等。

Alexandru Popescu谈InfoQ.com网站架构

InfoQ首席架构师Alexandru Popescu在采访中谈论了InfoQ架构、Webwork与DWR、Hibernate与JCR、Hibernate可扩展性、最新的InfoQ视频流系统和InfoQ的未来规划。