﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-HAHA-文章分类-JAVA随想</title><link>http://www.blogjava.net/samark/category/10855.html</link><description>HAHA</description><language>zh-cn</language><lastBuildDate>Tue, 27 Feb 2007 12:26:10 GMT</lastBuildDate><pubDate>Tue, 27 Feb 2007 12:26:10 GMT</pubDate><ttl>60</ttl><item><title>关于java泛型好处</title><link>http://www.blogjava.net/samark/articles/44922.html</link><dc:creator>Samark</dc:creator><author>Samark</author><pubDate>Sun, 07 May 2006 14:38:00 GMT</pubDate><guid>http://www.blogjava.net/samark/articles/44922.html</guid><wfw:comment>http://www.blogjava.net/samark/comments/44922.html</wfw:comment><comments>http://www.blogjava.net/samark/articles/44922.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/samark/comments/commentRss/44922.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/samark/services/trackbacks/44922.html</trackback:ping><description><![CDATA[
		<div>
				<div>最近几天无聊, 用java写了有分公司得销售公司得管理软件, 伴随着写代码, 以及重构, 得出下面结论:</div>
				<div> </div>
		</div>
		<div>
				<font color="#0000ff">1. 泛型的却很有用, 如果跟反射可以配合用好, 
普通企业应用得代码量可以减少非常多.</font>
		</div>
		<div>
				<font color="#0000ff">2. python之类type 
inference语言比java更适合做这种template抽象</font>
		</div>
		<div>
				<font color="#0000ff"> </font>
		</div>
		<div>举个例子: 企业程序大部分程序是实体信息管理得, 真正涉及交易清算得只有极小一部分</div>
		<div>对于所有得实体管理, 基本上都是增,删, 改, 查看, 查找等等几个功能</div>
		<div>我现在用了几个框架, 经典结合方式:webwork+spring+hibernate, 分析如下:</div>
		<div> </div>
		<div>hibernate O/R Mapping没什么花头, 为每个实体管理都要写一个映射类, 一般跟实体得数目差不多, 有时候为了避免关联, 
建几个视图映射会多点. But, 这个能用hibernate自己写得工具生成, 维护一个java类文件, 以及里面得meta 
description.</div>
		<div>或者自己写个程序生成( 给定数据源,, 输出java类文件, 以及hbm .xml文件 ), 这个只需要维护sql语句就兴了, 
我通常这么做.</div>
		<div> </div>
		<div>
				<strong>
						<font color="#ff0000">1. 不用泛型, 不用反射</font>
				</strong>
		</div>
		<div>spring层要写5个service(假设一个实体对应一个service), 分别实现读实体, 加实体, 删实体, 
根据条件查找实体List这些功能.</div>
		<div> </div>
		<div>要写5个不同得实体类得Action, 然后Action里面实现校验, 增加, 修改, 删除, 列表得功能, 
每一个类要实现得功能同样也类似.</div>
		<div> </div>
		<div>这些都没多少重构实质性得体现, 好处不明显, 可以提取得公共代码非常少.</div>
		<div> </div>
		<div>
				<font color="#ff0000">
						<strong>2. 不用泛型, 用反射</strong>
				</font>
		</div>
		<div>在 1 得基础之上, 可以重构提取出一个公共service, 将分散在5个service得公共代码kill掉. 多出一个根据实体类参数操作得公共类,  
但是类得数量增加一个.</div>
		<div> </div>
		<div>同样Action也可以提出一个baseaction来</div>
		<div> </div>
		<div>重构消去了一部分代码, 每个service得代码还是存在重复代码, 但是这个还可以通过反射合成一个service, 不过掉用者要用反射调用</div>
		<div> </div>
		<div>对于action因为需要配置, 除非webwork支持类型得注入, 否则, 不好消去.</div>
		<div>如果webwork spring 支持实体类型得注入, 那么到此可以结束, 只写一套逻辑, 代码也没有重复, 由于精力有限, 
没有去深入研究spring AOP跟webwork 得inteceptor机制,  不知道支持不支持.</div>
		<div> </div>
		<div>
				<font color="#ff0000">
						<strong>3.用泛型, 用反射</strong>
				</font>
		</div>
		<div>在1得基础上引入泛型, 写一个泛型service, 写一个泛型webwork action , 也没有研究过xwork中泛型对象是怎么配置产生得, 
如果支持配置, 只需要写一个action即可, 如果不支持, 需要为每个实体类写一个webwork action</div>
		<div> </div>
		<div>同样页面也是这个样子</div>
		<div> </div>
		<div>但是, java得泛型用了一把, 不说对很多东西支持得很差, 光写法上来看, 跟C++ template一致, 仍然是一大堆得&lt;&gt;, 
让初学者吐血, 变成高手炫耀得奇技淫巧. 比起python之类动态类型安全语言type inference机制相差太远, java泛型还有很长得路要走, 
不过静态语言走到type inference上来得话, 编译类型检查得好处就没了, 所以java这方面永远不可能~~~</div>
		<div>通过上面考虑, 我觉得python更适合web管理程序, 对于很多entity management得程序完全可以写出一个服务所有, 
仅仅是O?Rmapping就没办法省. 不知道python有没有类似java得反射, 如果有得话会更好, 可以写出更通用, 量更少得代码. 相信ruby on 
rails成功也有这方面得原因(我没用过ruby, 错了也别骂我), 毕竟代码越少越好, 尤其是重复代码</div>
		<div> </div>
		<div>我得主张是kill掉all重复代码, 只要能抽象统一得代码重复就是罪过, 哈哈, 相信用python可以把这个做得更好, 
越来越喜欢python语言得特性了, 可惜还没拿他来做过web程序</div>
<img src ="http://www.blogjava.net/samark/aggbug/44922.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/samark/" target="_blank">Samark</a> 2006-05-07 22:38 <a href="http://www.blogjava.net/samark/articles/44922.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>