代码改变世界

Java 7 resources

2012-01-11 16:44 by 康杜, 163 阅读, 0 推荐, 收藏, 编辑
摘要:Alex Miller’s Java 7 resources http://tech.puredanger.com/java7 阅读全文

异常处理的原则

2012-01-11 15:57 by 康杜, 2121 阅读, 0 推荐, 收藏, 编辑
摘要:这篇文章是我看到讲异常处理最好的一篇文章http://www.objectsource.com/j2eechapters/Ch18-Exception_Handling.htm。强烈建议阅读。以下该文内容的精粹。1. 异常处理基础 1.1 System.out.println是高代价的。调用System.out.println会降低系统吞吐量。 1.2 在生产环境中别用异常的printStackTrace()方法。printStackTrace默认会把调用的堆栈打印到控制台上,在生产环境中访问控制台是不现实的。 2. 异常处理基本原则 2.1 如果你不能处理异常,不要捕获该异... 阅读全文

关于重用

2012-01-11 10:23 by 康杜, 254 阅读, 0 推荐, 收藏, 编辑
摘要:重用的目的是DRY(Don't repeat yourself) 最大级别的重用是系统的重用,然后是Bundle的重用,再是包的重用,最后是类级别的重用。 所以我们构建系统的时候,应该着重考虑系统可不可以被重用(比如单点登录SSO服务系统, 全文查询服务系统),然后考虑在一个系统里面Bundle能不能重用(让我们的系统模块能够相对独立,让以后的系统维护、升级能够相互不受影响),再是包的重用... 阅读全文

意大利面代码

2012-01-09 11:52 by 康杜, 997 阅读, 0 推荐, 收藏, 编辑
摘要:Spaghetti code是一个反模式(见《A Big Ball of Mud》)。在这个模式中,代码交织在一起,导致可读性、可维护性很差。 从编程语言上来看,goto是Spaghetti code的一个显著例子。在运用goto语句的程序中,程序执行指令能够调整到程序中的任何地方。但是这种灵活性会带来复杂性(可读性差,可维护性差)。后来,人们提出了“结构化编程”。 是不是“结构化编... 阅读全文

Polyglot Programming(多语言编程)

2012-01-06 13:49 by 康杜, 484 阅读, 0 推荐, 收藏, 编辑
摘要:来自Thoughtworks的Neal Ford http://www.nealford.com/bio 在2006年的时候提出一个概念Polyglot Programming, 他认为一个理想的系统应该运用多种语言编写,利用各种语言的优势以解决不同的问题。 在我们的日常工作中一个明显的例子是JavaScript做页面展示,Java(.Net)平台处理业务逻辑,或者还可以加上PL/SQL等... 阅读全文

关于系统分层的自问自答

2012-01-06 11:46 by 康杜, 386 阅读, 0 推荐, 收藏, 编辑
摘要:这是我对系统架构中分层的自问自答,也是我对系统分层的理解。 Q. 为什么要系统分层(Why layered system architecture) A. 系统分层不是软件系统才有,比如计算机网络中就由OSI 7层网络模型。 在所有的系统组件中,每个组件的关注点是不一样,相互的依赖程度不一样,变化的频率也是不一样的。比如,有些组件关注通讯、事务、安全(当然这些都被做成中间件产品了,比如We... 阅读全文

UBIQUITOUS LANAGUAGE

2012-01-06 10:39 by 康杜, 233 阅读, 0 推荐, 收藏, 编辑
摘要:一个项目如果不存在一门通用语言,那么领域专家必须把问题解释给技术人员和其他的领域专家,甚至在领域专家之间,技术人员之间都需要相互解释。《Domain Driven Design》一书提到Ubiquitous Lanaguage(通用语言),并给出了它的解决方法-运用领域模型。并强调,在所有的够团队沟通过程中,不论是图表,书面表达甚至讲演中都使用通用语言。并且意识到,通用语言改变了意味着领域模型发生... 阅读全文

用Groovy方式实现接口便于单元测试和协作开发

2012-01-05 14:00 by 康杜, 518 阅读, 0 推荐, 收藏, 编辑
摘要:在现代的软件开发中,应用系统往往被划分为多个模块以降低系统的复杂度,同时也便利于开发人员开发和测试。本文着重说明采用Groovy方式如何便于协作开发。 OrderBook 团队在开发订单管理模块,编写了一个接口 package art.groovy.order; public interface Order { int place(); } Billing团队... 阅读全文

用GMaven plugin更好地编译系统

2011-12-28 14:46 by 康杜, 2367 阅读, 0 推荐, 收藏, 编辑
摘要:在许多情况下我们需要动态地读取配置信息,以构建特定的应用系统。一般地,我们会考虑采用ant脚本帮我们做到这一点。但是,ant脚本所特定的语法结构不是Java程序员所熟悉的。本文提供另外一种思路--通过GMaven plugin调用Groovy脚本帮我们读取配置文件,替换配置文件中的变量和拷贝到特定的位置。 1. 在POM文件中添加GMaven plugin <build> ... 阅读全文

String的intern方法的副作用

2011-12-27 11:49 by 康杜, 402 阅读, 0 推荐, 收藏, 编辑
摘要:以下的测试环境是 java version "1.6.0_29" Java(TM) SE Runtime Environment (build 1.6.0_29-b11) Java HotSpot(TM) Client VM (build 20.4-b02, mixed mode, sharing) import java.util.Random; public class ... 阅读全文