简单性的谎言

   |      

简单是一个诱人的概念。我们都想使事情变得简单。但是当我们谈论软件时,简单可能意味着至少两件不同的事情。

对于非平凡软件,总是有两种看待方式:实现视图和使用视图。我一直有一种印象(我可能是错的),许多说“J2EE太复杂”的人混淆了第二种观点为第一种。所以,以防我在这方面是对的,我认为我们应该重新措辞。也许我们应该说“J2EE太/不方便/”。

一个简单的框架通常并不是解决困难问题的最佳方案。让开发者生活变得容易并不意味着给我们简单的工具。J2EE开发的问题不在于J2EE堆栈提供了过多的复杂功能;而在于这些功能没有以方便的方式向用户展示。

例如,Hibernate在实现方面比CMP 2.1实体bean容器要复杂得多。可以说,Hibernate的一些用户可见功能也更为复杂。例如,HQL比EJBQL具有更多的功能,因此可以说更复杂。同样,Hibernate对多种继承映射策略的支持是一个复杂的功能,在CMP 2.1中不可见。

但正是这种复杂性使得Hibernate强大,也许矛盾的是,简化了使用Hibernate编写应用程序的人的生活。相比之下,CMP 2.1同时在功能上太简单(从用户的角度看)又太复杂。

最好的框架是/强大的/,而不是简单的。但它们确实试图尽可能地将内部复杂性从用户面前消除。有时是可能的,有时则不是。如果你试图过分简化一个困难的问题,你最终会让用户的生活变得更难,他们不得不绕过框架的限制,而不是与框架一起工作。

对困难问题的简单解决方案非常少。当有人声称找到了一个解决方案时,要非常怀疑。


返回顶部