目前正在重读《Core J2EE Patterns》这本书。经历了几年的编E生zdpȝ设计Q重读这本书的第二版Q感触良多?恰好看到gigix在blog中发表的“那本”J2EE书——《J2EE核心模式》(W二版)译者序 ?虽然我很看中文的技术书c,但是q篇译者序却值得收藏Q收录在自己的blog中。借此Q感谢译者翻译这本书Qؓq大的中国程序员带来了一本好书?/P>
dq本《J2EE核心模式》,你首先就会注意到软gҎ论领域的两位大师GradyBooch和MartinFowler撰写的序a。在q样两䆾序言后面再附上一“译序”,q个念头本np够荒谬和僭越Q不M在莎之后再写一出关于丹麦王子复仇的剧本。大师们的判断是中肯而毫不含p的Q“没有这本书Q就别开发EJB。”他们的担保以认本书在其论域中舍我其谁的C。它是“那本”J2EE书(THEJ2EEbookQ?
当然Q对于广大中国开发者而言Q我们早已l在“没有这本书”的条g下开发了大量J2EE、乃至EJB应用pȝ。那些充满了波折和磨隄开发历E似乎让不少E序员生了某种自信Q在掌握了若qAPIl节、若q应用服务器配置诀H、若q框架类库用法之后,他们或是公开、或是暗自地把自己当成了当之无愧的Java企业开发专家———不Q这些话没有M揶揄的意思:我们惌的其实是Q本书恰恰是Z上这一cd发者写的。对于他们想成ؓ “Java企业开发专家”的隐秘Ʋ望Q这本《J2EE核心模式》就是最大限度的补救和成全。如果说Q此前的各种教程都是在介lJ2EE开发中的“内容”要素———也是Q教l我们“做什么”———的话,本书x的则是这里的“Ş式”要素,是“怎样做”才能开发出高效的、优雅的J2EEpȝ。读者从中学到的Q将不仅仅是“J2EE技术”,而是“如何用J2EE技术进行设计”?
换句话说Q如果你以前没有qJ2EE实践Q但明早应聘一个需要?qJ2EE开发经验”的职位Q本书中不包含你今晚要彻夜吞咽的那一cȝ识;相反Q如果你Q这位隐形的“Java企业开发专家”,q求的职位是“资深Java应用pȝ架构师”,如果你预料到未来的上司明天将问v“怎样实现讉K控制”、“何旉用细_度的接口设计”等“高阶”问题,那么恭喜你,今晚———乃至今后———你选对了补评ȝ?
作ؓ本书W一版的忠实读者,我们Q半是欣喜、半是惊Ӟ发现眼前的这部第二版构成了全新的阅读l验。作者们按照最新版J2EE技术规范(其是EJB2.1Q全面修订了技术细节;Ҏ模式C的研I交,作者们补入了若q模式;即是一些不涉及技术更新的部分Q论q方式、示例也完全不同于第一版;原有的PSA目Q第一版“尾声”一章)融入了其余各章的“示例代码”部分;而新增的整整一章讨论“微架构”的֣、对WebService {技术的x、对各种的持久化ҎQ定制持久化、EJB、JDO{)的深入讨论,都体现出作者们Ҏ书新版的持箋投入?
受益于本书有q_在此我们也想不揣冒昧Cؓ本书的中国读者们一条高效的阅读路径Q与W一章相比,W五章“J2EE模式概览”是读者更合理的v步点。请其x其中对“分层”、“术语”和模式/{略区别的讨论,q些都是贯穿全书的重要概念!其次Q应该通读W二章“表现层设计考虑和不佛_践”和W三章“业务层设计考虑和不佛_践”:即你不打算使用M模式Q甚臻I即你根本不兛_J2EE开发,只要你的工作与分布式企业应用pȝ有关Q这两章考察的问题都是你q早会遇到的。至于每个具体模式本w,我们则推荐读者留意其中详的“策略”部分和那些散布其中的“设计手记”。前者讨Z对同一个模式的多种实现ҎQ后者则H出介绍了特定开发领域的一些核心概念和考虑?
一部英文技术论著在汉语中的旅行Q永q是一D难以捉摸的行程。对于本书的汉语译者,“技术难度”ƈ非挑战:全书讨论的正是译者们最为熟知的一个领域,所以我们能够负责Q地说Q在q个中译本里Q没有Q何技术细节会因ؓ译者的无知或生疏而发生变形或曲解。这ơ翻译的原则和前提是对原文的d领会?
事实上,译者的工作中遇到的困难主要发生在“语汇”层面。简单地_J2EE专著的译者总要面对“翻Q还是不Z的两难处境Q对象、函数的名称QUML图中的各U元素,q些内容p语表C早是U定俗成Q即使是pE度略低的开发者大概也都能LQ所以,在读者能够理解的部分可能保留原文似乎是一U合理的做法———毕竟开发工作最l是与代码有养I而代码则肯定是要Z以“英文”的。但在另一斚wQ翻译的责Q在于让不谙原文的读者也能通达作品Q如果译文中大量D落Q不包括CZ代码Q都仍保留ؓ英文或“类英文”,那么读者也无法直观地获得原文包含的信息。反复权衡之后,在这个译本中译者的解决方式q是折衷的。工作中我们采取了以下原则:
首先Q术语尽可能采用通用文献定译Q不自创译法。对于各个模式的名称、模式文档模版各部分名称、重构手法名Uͼ我们参考了李英军等译《设计模式》、熊节等译《重构》等译作Q以及IBMDe鄄veloperWorks中文|站的部分资源?
其次Q本领域的一些常见术语,如果没有定译Q本书也不自我作古、强译ؓ中文Q而是保留英文原字。这一cȝ术语包括Qapplet?servlet、bean、entitybean、sessionbean、cookie、WebService{。根据我们的观察Q在日常工作中,国内的开发者已l习惯按原文使用以上术语。在一些情况下Q我们也以注释Ş式澄清了q些术语的用法?
W三Q模式中的对象名Uͼ往往按照代码风格命名Q比如“BusinessObject”、“CustomerTO”等。如果对此完全不加翻译,那么很多充斥q类表达的段落就很难理解。我们的原则是,在每个自然段W一ơ出现某个这c表达方式时Q用括号注明Q比?“BusinessObjectQ业务对象)”、“CustomerTOQ客户传输对象)”等。希望这个做法能够维持易懂和z之间的q?
W四Q书中示例代码占有相当大的比重,而代码注释则是理解这些代码的关键。我们把所有代码注释译Z文。而对在视图中昄特定l果的代码(比如调试信息{)Q我们没有改Z文,只是在必要时对输Z息的涵义加以注解。如果读者更信赖代码原貌Q还可以从本书官方网站http //www.corej2eepatterns.com/下蝲?
W五Q原书不包含注释。目前的所有注解都是译注。书中申义未畅处Q译文中以方括号?”加以解释、补I略去生ӆ。这与上面两条原则一P都类g在原作讲话时的插嘴———但译d本nQ似乎本已l是一U“插嘴”了。在博学的读者看来,有时候译者或许还不如保持体面的沉默———但我们只能力图做到插嘴而不多嘴?
原书l多人、多版修订完成,隑օ存在打字、排印错误。译本根据本书官方网站的最新勘误表订正Qƈl合参照本书W一版,另外修正了数十处错误?
Q本文ؓ卛_?005q?月出版的《J2EE核心模式》中文版的译序,本报刊登时有删节Q?/P>