<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title></title>
    <description></description>
    <link>http://clarkhill.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
      <item>
        <title>不要让开源架构代替我们的设计</title>
        <author>clarkhill</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://clarkhill.javaeye.com">clarkhill</a>&nbsp;
          链接：<a href="http://clarkhill.javaeye.com/blog/190484" style="color:red;">http://clarkhill.javaeye.com/blog/190484</a>&nbsp;
          发表时间: 2008年05月07日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          现在开源的各种framework非常的多。干什么的都有。但是，是不是我们使用了这些开源framework就能够一劳永逸的解决我们的设计问题呢？我觉得答案是否定的。如果没有自己对设计和系统的理解。框架滥用就在所难免。比如说hibernate（以下简称HI），它是一个对象持久框架，他的目的非常的简单，就是提供对象持久化的手段。但是在日常的工作中，我经常看见很多人把HI用的非常的复杂，希望用HI实现一些复杂的数据库查询，似乎把HI看作了一个数据库抽象层了。使用HI，却永远不忘记SQL。我觉得这是不正确的。虽然HI的本质是ORM。但是它可不是用来替换数据库的。不要把HI当作数据库一样去操作。在设计的时候要考虑对象的差别，那些是业务对象，那些本身就是数据。如果本身就是处理数据的话，我们可以使用criteria这样的数据操作封装来操作数据。甚至，直接使用SQL语句，这时候我们的视角就发生了变化，不在是停留在业务对象上了。数据就是数据不要往对象上靠，这样更好。动不动的就搞一个POJO可不是一个好的习惯。另外，如果我们是对原有系统进行改造的话，推荐使用cayenne，apache的开源orm，有自己的管理器，可以自动从数据库中同步出pojo来。<br /><br />    如果是我们自己从头开始设计系统，建议不要再在数据库里面指指戳戳了。把数据库表之间的关系，改为对象之间的关系，自己写程序来维护自己对象之间的关系，推荐使用di（依赖注入），不用也可以，关键看你系统的规模。数据库中的表要尽可能的简单，要分维度和事实，以便于复用并（建议大家了解一些数据仓库的概念）减少表中的字段数。如果你采用多维结构来设计数据库的话，表中的字段不会很多。设计的好坏完全凭你多年的经验和对客户系统的了解。（分析出那些是维度，那些是事实，不是一个容易的事情，做过的人都知道）<br /><br />    对于框架的应用，我本身都是非常慎重的。如果我们不理解这些框架的使用背景，使用这些框架，就难免产生各种各样的问题。那么，好与不好的原则是什么？我觉得《Better, Faster, Lighter Java》一书的作者说的很好：Keep It Simple、Do One Thing,and Do It Well、Strive for Transparency。翻译过来就是：保持简单、一次做好一件事、力求透明。其实一个好的框架最起码要做到的就是透明性，有些人也管它叫非侵入性。比如spirng。（spring因此遭到批评说它其实什么也没有做，这个我有所同感）其实侵入性不是框架的问题，是我们自己设计的问题。我们应该在我们的设计中对引入的框架部分做我们自的接口，这样就可以摆脱框架侵入性的困扰。<br /><br />    最后我想说说我心目中的先进的web应用框架应该是什么样子的。首先它一定是REST的，所有的东西都是资源，这样可以避免session的烦恼。其次，它一定是面向服务的，也就是所谓的soa，这样可以实现松耦合，并且可以实现类似组件的功能。view部分一定是ajax的，但是也要组件化，现成的方式是EXT+buffalo。但其实也可以使用其他的界面方式，比如net 的winform或者java的swing。最后还有一个对象管理器，专门负责业务对象的管理。透明的采用aop的方式，把日志、任务、权限、事物、工作流，集成进来，各个部分都是独立可配置的。可以根据需要将它们配置进我们的应用中。最后提供一种分布式的解决方案来应对可伸缩性。另外根据约定，尽量减少配置的数量和次数，尽可能的提供配置工具，而不是我们手写XML配置文件。
          <br/>
          <span style="color:red;">
            <a href="http://clarkhill.javaeye.com/blog/190484#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 07 May 2008 09:59:36 +0800</pubDate>
        <link>http://clarkhill.javaeye.com/blog/190484</link>
        <guid>http://clarkhill.javaeye.com/blog/190484</guid>
      </item>
      <item>
        <title>使用java动态代理机制实现AOP是丑陋的</title>
        <author>clarkhill</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://clarkhill.javaeye.com">clarkhill</a>&nbsp;
          链接：<a href="http://clarkhill.javaeye.com/blog/189854" style="color:red;">http://clarkhill.javaeye.com/blog/189854</a>&nbsp;
          发表时间: 2008年05月05日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          我们知道，AOP实现，一般要尽可能的透明化。业务类是不管这些切面的。实现的方法，一般都是拦截器，或者类似AspectJ那样的代码生成工具。如果使用动态代理，直接写的话，会使代码很丑陋。我宁可采用别的方法实现。除非实现某个规则约束。但是这样的话就不透明了。所以，生成代码的模式更好一些。<br />    但是我们在程序里面生成代码，似乎是一件比较奇怪的事情。就好像我们在干jvm干的活。感觉有些怯怯的。想和大家讨论一下。听听大家的意见。另外AOP还有什么实现原理呢？<br /><br />    另外，使用动态代理似乎效率不是很高。
          <br/>
          <span style="color:red;">
            <a href="http://clarkhill.javaeye.com/blog/189854#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 05 May 2008 17:28:00 +0800</pubDate>
        <link>http://clarkhill.javaeye.com/blog/189854</link>
        <guid>http://clarkhill.javaeye.com/blog/189854</guid>
      </item>
  </channel>
</rss>