×

Loading...
Ad by
  • 最优利率和cashback可以申请特批,好信用好收入offer更好。请点链接扫码加微信咨询,Scotiabank -- Nick Zhang 6478812600。
Ad by
  • 最优利率和cashback可以申请特批,好信用好收入offer更好。请点链接扫码加微信咨询,Scotiabank -- Nick Zhang 6478812600。

我为什么憎恨Framework (翻译)

本文发表在 rolia.net 枫下论坛我为什么憎恨Framework

我目前正在规划做一个Java web应用程序(是的, 一定要Java, 这有多种理由, 但我现在觉得这些理由有些站不住脚了). 在这个过程中, 我评估了一堆的J2EE有portlet功能的, 并且JSR兼容的, 基于MVC角色的CMS web服务应用程序容器Frameworks.

在花费了几十小时来阅读特性说明和文档, 我已经可以把眼睛抠出来了.

假定我要做一个鞋架.

我曾经做过一些小的木工活, 我知道我需要的东西: 一些木头和一些基本工具: 一个卷尺, 一把锯, 一把直尺和一把锤子.

如果我要造一个房子而不是一个鞋架, 我依然需要上面这些工具(还有一些其它的).

于是我到工具店去买工具, 问销售人员锤子在哪里.

"锤子?" 销售人员问. "现在没有人买锤子了. 这些东西已经过时了."
这事让我觉得奇怪, 就问他为什么.
"锤子有一个问题: 有那么多种锤子, 有专门打木桩的, 有拨钉子的, 也有普通的圆头锤子. 如果你买了一种锤子, 然后你发现你需要另一种锤子怎么办? 你不得不买另一把锤子. 人们发现大多数人很需要一种锤子, 只要这一把锤子就可以满足各种他一生中能需要的需要锤子的地方.
"嗯......, 我觉得这听起来不错. 这种通用的锤子摆在哪?"
"不, 我们已经不卖这种锤子了. 他们已经完全过时了. 后来又发现如果只用一种锤子来做各种锤子所做的事情, 哪种做起来都不顺手. 用打桩的锤子来钉钉子不是很好用, 如果你想干掉以前的女朋友, 就只有普通的锤子最好用."
"确实是这样. 那么现在就没有人买通用锤子了, 但现在你们又不卖以前的各种老式锤子, 那你们卖什么锤子?"
"事实上, 我们现在根本不卖锤子."
"那么...."
"根据我们的研究, 人们真正的需要并不是通用的锤子. 用合适的锤子来做不同的工作总是最好的. 于是我们开始销售锤子工厂, 这种工厂可以生产出你所需要的任何种类的锤子. 你只需要给工厂找来工人, 启动机器, 买来原料, 付水电费帐单, 你就可以马上得到你*正好*需要的那种锤子.
"但我不想买一个锤子生产工厂..."
"不要紧, 因为我们已经不再销售它了."
"但我觉得你刚才说..."
"我们发现大多数人不是真正需要整个一个锤子生产工厂. 比如, 有些人永远也不会需要一把圆头的普通锤子(也许他们永远不会有前任女友, 或者说他们会用冰锥来干掉他们). 所以让一些人来买一个可以生产世间任何种类的锤子的工厂没什么意思."
"是的, 这听起来很有道理"
"于是, 我们开始销售锤子生产工厂的图纸, 让他们自己建造自己的锤子生产工厂, 这些工厂只生产他们需要的锤子."
"让我来猜猜: 你们已经不再销售这些东西了."
"不卖了, 当然不卖了. 后来发现人们不想只为了造几把锤子就建造一个工厂. 让工厂建造专家来建造工厂, 我从来都是这么说的!"
"我在这点上同意你的观点"
"是的. 于是我们停止销售工厂图纸, 开始销售生产锤子工厂的工厂. 每个生产锤子工厂的工厂都是由建造生产锤子工厂的工厂的顶级专家完成的, 你不必关心一个工厂建造的细节, 但你仍然可以得到一个专为你订做的生产锤子的工厂, 根据你的设计, 生产出专为你订做的锤子."
"可是...这并不真正..."
"我知道你要说什么!! ...我们这些也不卖了. 出于某些原因, 买这种生产锤子工厂的工厂的人不是很多, 所以我们针对这个问题有了一个新的解决方案."
"很好."
"我们回过头来看我们的全球工具架构, 我们断定人们在管理生产锤子工厂的工厂, 以及它生产出来的生产锤子的工厂的时侯, 他们遇到了很多挫折. 如果人们同时管理一个生产卷尺的工厂的工厂, 一个生产锯子工厂的工厂, 和一个生产直尺工厂的工厂, 还不用说木材加工和管理工厂, 那么这种负担会变得很头痛. 当我们认真审视这种情况的时侯, 我们觉得对于某些只想做个鞋架的人来说这太复杂了."
"是这样, 不开玩笑"
"于是这个星期我们推出了一个通用工具制造工厂的工厂的工厂, 这样你的所有不同的工具生产工厂的工厂就可以从这个唯一的工厂里生产出来. 这个工厂的工厂的工厂会只生产出你真正需要的生产工具的工厂的工厂; 然后每个工具工厂的工厂会根据你的需要只生产出一个你需要的工具工厂. 最后生产出来的工具会是你这个项目的最理想的工具. 你会得到正是你想要的锤子, 正是你想要的卷尺, 所有这些只需要按一个按钮(虽然你可能必须发布几个新的配置文件来使所有的工作按照你的预期来完成)."
"那么你们不卖锤子吗? 什么样的都没有?"
"没有. 如果你真的需要一个高质量, 工业标准生产出来的鞋架, 你绝对需要一些高级的东西, 而不是一个从破工具店买来的锤子."
"所有的人现在都这样做吗? 人们只要需要一个锤子, 就都在用通用工具生产工厂的工厂的工厂?"
"正是."
"嗯...好吧. 我猜我也必须这样做, 如果现在事情都是这样做的, 我最好还是学会怎么做."
"你真了不起!!"
"这个东西带了文档, 对吧?"更多精彩文章及讨论,请光临枫下论坛 rolia.net
Report

Replies, comments and Discussions:

  • 工作学习 / 专业技术讨论 / 关于OO和分层: 我觉得OO和分层后程序变得十分难懂. 我们的一个小界面, 有两三个窗口. 用了七八个程序员写了两三年. 一共有十几层, 若干OO, 若看设计, 可称典范.
    • 程序员's problem then.
    • 我以前也是写过很多的C语言程序(Win32 API),正是因为写得太多,才逐渐发现用OO, class、分层会使软件变得容易看懂,易于维护,逻辑清晰。
      到现在变得即使做一个简单的1+1的算法也会本能的想一下是否要用借口、继承、设计模式这些概念。呵呵,.Net的OO确实很舒服
      • 一般写过面向过程程序的人都不能很好的使用OO, 无论你多努力.
    • 如何写 "Hello World"
      本文发表在 rolia.net 枫下论坛public interface MessageStrategy {
      public void sendMessage();
      }

      public abstract class AbstractStrategyFactory {
      public abstract MessageStrategy createStrategy(MessageBody mb);
      }

      public class MessageBody {
      Object payload;
      public Object getPayload() {
      return payload;
      }
      public void configure(Object obj) {
      payload = obj;
      }
      public void send(MessageStrategy ms) {
      ms.sendMessage();
      }
      }

      public class DefaultFactory extends AbstractStrategyFactory {
      private DefaultFactory() {;}
      static DefaultFactory instance;
      public static AbstractStrategyFactory getInstance() {
      if (instance==null) instance = new DefaultFactory();
      return instance;
      }

      public MessageStrategy createStrategy(final MessageBody mb) {
      return new MessageStrategy() {
      MessageBody body = mb;
      public void sendMessage() {
      Object obj = body.getPayload();
      System.out.println((String)obj);
      }
      };
      }
      }

      public class HelloWorld {
      public static void main(String[] args) {
      MessageBody mb = new MessageBody();
      mb.configure("Hello World!");
      AbstractStrategyFactory asf = DefaultFactory.getInstance();
      MessageStrategy strategy = asf.createStrategy(mb);
      mb.send(strategy);
      }
      }更多精彩文章及讨论,请光临枫下论坛 rolia.net
      • hahaha
      • 从OO的角度说,这个只属于轻度OO,代码中也没有什么trick.但并不觉得这个代码容易懂,也不觉得容易维护.
    • 偶读书的时候学习OO,然后毕业后把OO理念应用到AS/400的RPG和主机的COBOL上,没想到被骂得狗血淋头 :)
    • 充分发挥OO+XML的威力, 一个message几千个XML tag, 程序分成十几层, 不断的OO, 很容易就让一个项目永远做不完, 再也不用耽心失业
      • 搞成xml就很容易分分钟完成了
    • Programmers for BIOS JVM OS compiler ... should all be hung right away??? You kiddoo.
    • Why I hate framework...
      • 我为什么憎恨Framework (翻译)
        本文发表在 rolia.net 枫下论坛我为什么憎恨Framework

        我目前正在规划做一个Java web应用程序(是的, 一定要Java, 这有多种理由, 但我现在觉得这些理由有些站不住脚了). 在这个过程中, 我评估了一堆的J2EE有portlet功能的, 并且JSR兼容的, 基于MVC角色的CMS web服务应用程序容器Frameworks.

        在花费了几十小时来阅读特性说明和文档, 我已经可以把眼睛抠出来了.

        假定我要做一个鞋架.

        我曾经做过一些小的木工活, 我知道我需要的东西: 一些木头和一些基本工具: 一个卷尺, 一把锯, 一把直尺和一把锤子.

        如果我要造一个房子而不是一个鞋架, 我依然需要上面这些工具(还有一些其它的).

        于是我到工具店去买工具, 问销售人员锤子在哪里.

        "锤子?" 销售人员问. "现在没有人买锤子了. 这些东西已经过时了."
        这事让我觉得奇怪, 就问他为什么.
        "锤子有一个问题: 有那么多种锤子, 有专门打木桩的, 有拨钉子的, 也有普通的圆头锤子. 如果你买了一种锤子, 然后你发现你需要另一种锤子怎么办? 你不得不买另一把锤子. 人们发现大多数人很需要一种锤子, 只要这一把锤子就可以满足各种他一生中能需要的需要锤子的地方.
        "嗯......, 我觉得这听起来不错. 这种通用的锤子摆在哪?"
        "不, 我们已经不卖这种锤子了. 他们已经完全过时了. 后来又发现如果只用一种锤子来做各种锤子所做的事情, 哪种做起来都不顺手. 用打桩的锤子来钉钉子不是很好用, 如果你想干掉以前的女朋友, 就只有普通的锤子最好用."
        "确实是这样. 那么现在就没有人买通用锤子了, 但现在你们又不卖以前的各种老式锤子, 那你们卖什么锤子?"
        "事实上, 我们现在根本不卖锤子."
        "那么...."
        "根据我们的研究, 人们真正的需要并不是通用的锤子. 用合适的锤子来做不同的工作总是最好的. 于是我们开始销售锤子工厂, 这种工厂可以生产出你所需要的任何种类的锤子. 你只需要给工厂找来工人, 启动机器, 买来原料, 付水电费帐单, 你就可以马上得到你*正好*需要的那种锤子.
        "但我不想买一个锤子生产工厂..."
        "不要紧, 因为我们已经不再销售它了."
        "但我觉得你刚才说..."
        "我们发现大多数人不是真正需要整个一个锤子生产工厂. 比如, 有些人永远也不会需要一把圆头的普通锤子(也许他们永远不会有前任女友, 或者说他们会用冰锥来干掉他们). 所以让一些人来买一个可以生产世间任何种类的锤子的工厂没什么意思."
        "是的, 这听起来很有道理"
        "于是, 我们开始销售锤子生产工厂的图纸, 让他们自己建造自己的锤子生产工厂, 这些工厂只生产他们需要的锤子."
        "让我来猜猜: 你们已经不再销售这些东西了."
        "不卖了, 当然不卖了. 后来发现人们不想只为了造几把锤子就建造一个工厂. 让工厂建造专家来建造工厂, 我从来都是这么说的!"
        "我在这点上同意你的观点"
        "是的. 于是我们停止销售工厂图纸, 开始销售生产锤子工厂的工厂. 每个生产锤子工厂的工厂都是由建造生产锤子工厂的工厂的顶级专家完成的, 你不必关心一个工厂建造的细节, 但你仍然可以得到一个专为你订做的生产锤子的工厂, 根据你的设计, 生产出专为你订做的锤子."
        "可是...这并不真正..."
        "我知道你要说什么!! ...我们这些也不卖了. 出于某些原因, 买这种生产锤子工厂的工厂的人不是很多, 所以我们针对这个问题有了一个新的解决方案."
        "很好."
        "我们回过头来看我们的全球工具架构, 我们断定人们在管理生产锤子工厂的工厂, 以及它生产出来的生产锤子的工厂的时侯, 他们遇到了很多挫折. 如果人们同时管理一个生产卷尺的工厂的工厂, 一个生产锯子工厂的工厂, 和一个生产直尺工厂的工厂, 还不用说木材加工和管理工厂, 那么这种负担会变得很头痛. 当我们认真审视这种情况的时侯, 我们觉得对于某些只想做个鞋架的人来说这太复杂了."
        "是这样, 不开玩笑"
        "于是这个星期我们推出了一个通用工具制造工厂的工厂的工厂, 这样你的所有不同的工具生产工厂的工厂就可以从这个唯一的工厂里生产出来. 这个工厂的工厂的工厂会只生产出你真正需要的生产工具的工厂的工厂; 然后每个工具工厂的工厂会根据你的需要只生产出一个你需要的工具工厂. 最后生产出来的工具会是你这个项目的最理想的工具. 你会得到正是你想要的锤子, 正是你想要的卷尺, 所有这些只需要按一个按钮(虽然你可能必须发布几个新的配置文件来使所有的工作按照你的预期来完成)."
        "那么你们不卖锤子吗? 什么样的都没有?"
        "没有. 如果你真的需要一个高质量, 工业标准生产出来的鞋架, 你绝对需要一些高级的东西, 而不是一个从破工具店买来的锤子."
        "所有的人现在都这样做吗? 人们只要需要一个锤子, 就都在用通用工具生产工厂的工厂的工厂?"
        "正是."
        "嗯...好吧. 我猜我也必须这样做, 如果现在事情都是这样做的, 我最好还是学会怎么做."
        "你真了不起!!"
        "这个东西带了文档, 对吧?"更多精彩文章及讨论,请光临枫下论坛 rolia.net