<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>解惑 &#187; 设计</title>
	<atom:link href="http://www.jiehoo.me/category/%e8%ae%be%e8%ae%a1/feed" rel="self" type="application/rss+xml" />
	<link>http://www.jiehoo.me</link>
	<description>解己之惑，解人之惑</description>
	<lastBuildDate>Sun, 07 Mar 2010 13:28:16 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Role的新意义</title>
		<link>http://www.jiehoo.me/new-meaning-of-role.htm</link>
		<comments>http://www.jiehoo.me/new-meaning-of-role.htm#comments</comments>
		<pubDate>Tue, 15 Sep 2009 02:10:09 +0000</pubDate>
		<dc:creator>Cherami</dc:creator>
				<category><![CDATA[设计]]></category>
		<category><![CDATA[cluster]]></category>
		<category><![CDATA[exchange]]></category>
		<category><![CDATA[load balance]]></category>
		<category><![CDATA[role]]></category>

		<guid isPermaLink="false">http://www.jiehoo.com/new-meaning-of-role.htm</guid>
		<description><![CDATA[进入这个新的项目后学习到的一个很重要的概念就是Role了，这个Role和我们平时的用户的Role是不同的，而是Service或者Component或者Instance的Role，怎么讲？其实就是一个东西，具备多种功能，你可以让它同时做那些事情，在高负载的情况下，你可以安装很多个，然后让不同的东西承担单独的功能或者几个功能。
说白了，这个不神秘，就是在系统设计的时候可以让某些功能启用，某些功能不启用，好处是什么呢？你可以针对系统的负载特点安排Cluster的配置，有些组件的负载更重一些，那么就多安装一些机器专门负责那个功能，也就是更加灵活的在各个层面可以实现负载横向扩展或者Cluster。
举个实际的例子：
微软的Exchange大家想必都用过，Exchange的功能也是可以划分Role的，你可以安装很多个Exchange，但是安装的时候选择这个Exchange的Role，可以是专门负责收邮件的，可以专门负责邮件的过滤，可以专门负责客户端访问，可以专门负责Mailbox，等等，想详细了解的朋友可以看看这个E文。
当然，这个Role其实有比较正式的名称，就是Server Roles。
]]></description>
			<content:encoded><![CDATA[<p class='fp'>进入这个新的项目后学习到的一个很重要的概念就是Role了，这个Role和我们平时的用户的Role是不同的，而是Service或者Component或者Instance的Role，怎么讲？其实就是一个东西，具备多种功能，你可以让它同时做那些事情，在高负载的情况下，你可以安装很多个，然后让不同的东西承担单独的功能或者几个功能。<br />
说白了，这个不神秘，就是在系统设计的时候可以让某些功能启用，某些功能不启用，好处是什么呢？你可以针对系统的负载特点安排Cluster的配置，有些组件的负载更重一些，那么就多安装一些机器专门负责那个功能，也就是更加灵活的在各个层面可以实现负载横向扩展或者Cluster。<br />
举个实际的例子：<br />
微软的Exchange大家想必都用过，Exchange的功能也是可以划分Role的，你可以安装很多个Exchange，但是安装的时候选择这个Exchange的Role，可以是专门负责收邮件的，可以专门负责邮件的过滤，可以专门负责客户端访问，可以专门负责Mailbox，等等，<a href="http://www.msexchange.org/tutorials/Introduction-Exchange-2007-Server-Roles.html">想详细了解的朋友可以看看这个E文</a>。<br />
当然，这个Role其实有比较正式的名称，就是Server Roles。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jiehoo.me/new-meaning-of-role.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SaaS和PaaS</title>
		<link>http://www.jiehoo.me/saas%e5%92%8cpaas.htm</link>
		<comments>http://www.jiehoo.me/saas%e5%92%8cpaas.htm#comments</comments>
		<pubDate>Tue, 26 May 2009 01:35:29 +0000</pubDate>
		<dc:creator>Cherami</dc:creator>
				<category><![CDATA[设计]]></category>
		<category><![CDATA[EC2]]></category>
		<category><![CDATA[force.com]]></category>
		<category><![CDATA[GAE]]></category>
		<category><![CDATA[PaaS]]></category>
		<category><![CDATA[SaaS]]></category>

		<guid isPermaLink="false">http://www.jiehoo.com/saas%e5%92%8cpaas.htm</guid>
		<description><![CDATA[昨天和Bruce聊天谈到这个，其实这两个概念并不神秘，SaaS就是Software As A Service，而PaaS就是Platform As A Service，这两个概念目前做得最成功的就是salesforce了，因为salesforce的成功，他们把salesforce背后的硬件基础设施和通用的软件基础设施抽取出来，变成了force.com，也就是PaaS。当然，在这两个概念之下又有人搞出了很多aaS：

如果一个公司想推PaaS，那么如果他自己没有一个成功的SaaS产品是不可能的，因为没有可信度，就像Google推广GAE很有底气，Salesforce推广force.com一样，他们有自己成功的platform，而且已经被自己证明是真实可行的。
现在也已推出的PaaS平台，除了force.com和GAE外，还有一个比较有名的就是Amazon的EC2，但是个人觉得EC2只能算是HaaS，因为没有强有力的软件平台以及公共基础设施，还是停留在硬件虚拟化的层面。
推荐另外两篇文章：
当今云计算平台之肤浅比较(EC2, GAE, GoGrid) 
Cloud versus cloud: A guided tour of Amazon, Google, AppNexus, and GoGrid
]]></description>
			<content:encoded><![CDATA[<p class='fp'>昨天和Bruce聊天谈到这个，其实这两个概念并不神秘，SaaS就是Software As A Service，而PaaS就是Platform As A Service，这两个概念目前做得最成功的就是salesforce了，因为salesforce的成功，他们把salesforce背后的硬件基础设施和通用的软件基础设施抽取出来，变成了force.com，也就是PaaS。当然，在这两个概念之下又有人搞出了很多aaS：<br />
<img src="http://server.51cto.com/files/uploadimg/20090204/1015520.jpg" alt="XaaS" /><br />
如果一个公司想推PaaS，那么如果他自己没有一个成功的SaaS产品是不可能的，因为没有可信度，就像Google推广GAE很有底气，Salesforce推广force.com一样，他们有自己成功的platform，而且已经被自己证明是真实可行的。<br />
现在也已推出的PaaS平台，除了force.com和GAE外，还有一个比较有名的就是Amazon的EC2，但是个人觉得EC2只能算是HaaS，因为没有强有力的软件平台以及公共基础设施，还是停留在硬件虚拟化的层面。<br />
推荐另外两篇文章：<br />
<a href="http://robertmao.com/archives/1323/">当今云计算平台之肤浅比较(EC2, GAE, GoGrid)</a> <br />
<a href="http://www.infoworld.com/d/cloud-computing/cloud-versus-cloud-guided-tour-amazon-google-appnexus-and-gogrid-122">Cloud versus cloud: A guided tour of Amazon, Google, AppNexus, and GoGrid</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.jiehoo.me/saas%e5%92%8cpaas.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>无状态化</title>
		<link>http://www.jiehoo.me/%e6%97%a0%e7%8a%b6%e6%80%81%e5%8c%96.htm</link>
		<comments>http://www.jiehoo.me/%e6%97%a0%e7%8a%b6%e6%80%81%e5%8c%96.htm#comments</comments>
		<pubDate>Thu, 21 May 2009 08:34:28 +0000</pubDate>
		<dc:creator>Cherami</dc:creator>
				<category><![CDATA[设计]]></category>
		<category><![CDATA[状态]]></category>
		<category><![CDATA[负载均衡]]></category>
		<category><![CDATA[集群]]></category>

		<guid isPermaLink="false">http://www.jiehoo.com/%e6%97%a0%e7%8a%b6%e6%80%81%e5%8c%96.htm</guid>
		<description><![CDATA[越来越感觉各种系统在构架的时候进行了无状态化，因为在大规模系统中，要更好的进行负载均衡以及集群，无状态的服务是最好的选择，因为每个请求都是独立的不依赖上下文的，任何一个服务节点的崩溃都不会影响整个系统，而且要增加系统的负载能力也很容易，增加更多的服务节点就行了。从GAE默认不包含Session我们就可以看到一些这样做的好处。而且Context或者Session之类的东西也比较好弄，也作为一个服务，根据某个UUID或者session id之类的东西就可以进行存取，如果某些服务真的需要session，那么可以到session服务取。但是这样做会导致session的那个服务成为系统的瓶颈和薄弱点，也会导致那部分的负载均衡和HA更难达到。结合客户端的RIA倾向，更多的Session和Context保存在客户端，利用客户端框架在发起请求的时候把需要的内容发送给服务器端。
]]></description>
			<content:encoded><![CDATA[<p class='fp'>越来越感觉各种系统在构架的时候进行了无状态化，因为在大规模系统中，要更好的进行负载均衡以及集群，无状态的服务是最好的选择，因为每个请求都是独立的不依赖上下文的，任何一个服务节点的崩溃都不会影响整个系统，而且要增加系统的负载能力也很容易，增加更多的服务节点就行了。从GAE默认不包含Session我们就可以看到一些这样做的好处。而且Context或者Session之类的东西也比较好弄，也作为一个服务，根据某个UUID或者session id之类的东西就可以进行存取，如果某些服务真的需要session，那么可以到session服务取。但是这样做会导致session的那个服务成为系统的瓶颈和薄弱点，也会导致那部分的负载均衡和HA更难达到。结合客户端的RIA倾向，更多的Session和Context保存在客户端，利用客户端框架在发起请求的时候把需要的内容发送给服务器端。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jiehoo.me/%e6%97%a0%e7%8a%b6%e6%80%81%e5%8c%96.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>搭建自己的云：Hadoop</title>
		<link>http://www.jiehoo.me/%e6%90%ad%e5%bb%ba%e8%87%aa%e5%b7%b1%e7%9a%84%e4%ba%91%ef%bc%9ahadoop.htm</link>
		<comments>http://www.jiehoo.me/%e6%90%ad%e5%bb%ba%e8%87%aa%e5%b7%b1%e7%9a%84%e4%ba%91%ef%bc%9ahadoop.htm#comments</comments>
		<pubDate>Fri, 03 Apr 2009 07:35:20 +0000</pubDate>
		<dc:creator>Cherami</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[设计]]></category>
		<category><![CDATA[云]]></category>
		<category><![CDATA[开源]]></category>
		<category><![CDATA[Cloud]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[hadoop]]></category>

		<guid isPermaLink="false">http://www.jiehoo.com/%e6%90%ad%e5%bb%ba%e8%87%aa%e5%b7%b1%e7%9a%84%e4%ba%91%ef%bc%9ahadoop.htm</guid>
		<description><![CDATA[呵呵，原来自己也可以搭云玩了，而且是Java的云，这是apache下的开源项目，是根据google发布的一些论文构建的，虽然根据这位老兄的实验，在集群环境下的性能并不是特别理想，但是还是值得一试的，毕竟代表了最先进的IT技术之一嘛。最后提一下这个Hadoop中文研究院，有兴趣不想看因为的可以看看这个网站。
]]></description>
			<content:encoded><![CDATA[<p class='fp'>呵呵，原来自己也可以搭云玩了，而且是<a href="http://hadoop.apache.org/">Java的云</a>，这是apache下的开源项目，是<a href="http://www.infoq.com/cn/articles/questions-about-cloud-computing">根据google发布的一些论文构建</a>的，虽然根据这位<a href="http://wind-bell.javaeye.com/blog/81490">老兄的实验</a>，在集群环境下的性能并不是特别理想，但是还是值得一试的，毕竟代表了最先进的IT技术之一嘛。最后提一下这个<a href="http://cn.hadoop.org/">Hadoop中文研究院</a>，有兴趣不想看因为的可以看看这个网站。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jiehoo.me/%e6%90%ad%e5%bb%ba%e8%87%aa%e5%b7%b1%e7%9a%84%e4%ba%91%ef%bc%9ahadoop.htm/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>还是SaaS吗</title>
		<link>http://www.jiehoo.me/%e8%bf%98%e6%98%afsaas%e5%90%97.htm</link>
		<comments>http://www.jiehoo.me/%e8%bf%98%e6%98%afsaas%e5%90%97.htm#comments</comments>
		<pubDate>Fri, 03 Apr 2009 06:43:25 +0000</pubDate>
		<dc:creator>Cherami</dc:creator>
				<category><![CDATA[设计]]></category>
		<category><![CDATA[远程调用]]></category>
		<category><![CDATA[SaaS]]></category>
		<category><![CDATA[Service]]></category>

		<guid isPermaLink="false">http://www.jiehoo.com/%e8%bf%98%e6%98%afsaas%e5%90%97.htm</guid>
		<description><![CDATA[今天和美国的架构师以及美国那边负责UI的consultant的头开会，从结果来看，感觉我们已经不是SaaS了，因为从他们考虑我们的Service的角度看，我们的Service基本上是in process的调用，都不太关注远程调用或者web service调用的可能性了，虽然架构师在我的提示下要求考虑这种远程调用的可能性，但是in process调用还是被优先实现。当然，我们的服务对外当然是SaaS的，因为用户不会关注我们的内部实现是否可以远程调用，但是这样的架构让我感觉不到SaaS的精髓。
可能是我对项目的期望太高，亦或者我们项目还在起步阶段，很多东西还没有最终确定，但是目前的情况让我还是有些不快和不安。
]]></description>
			<content:encoded><![CDATA[<p class='fp'>今天和美国的架构师以及美国那边负责UI的consultant的头开会，从结果来看，感觉我们已经不是SaaS了，因为从他们考虑我们的Service的角度看，我们的Service基本上是in process的调用，都不太关注远程调用或者web service调用的可能性了，虽然架构师在我的提示下要求考虑这种远程调用的可能性，但是in process调用还是被优先实现。当然，我们的服务对外当然是SaaS的，因为用户不会关注我们的内部实现是否可以远程调用，但是这样的架构让我感觉不到SaaS的精髓。</p>
<p>可能是我对项目的期望太高，亦或者我们项目还在起步阶段，很多东西还没有最终确定，但是目前的情况让我还是有些不快和不安。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jiehoo.me/%e8%bf%98%e6%98%afsaas%e5%90%97.htm/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Google式设计</title>
		<link>http://www.jiehoo.me/google%e5%bc%8f%e8%ae%be%e8%ae%a1.htm</link>
		<comments>http://www.jiehoo.me/google%e5%bc%8f%e8%ae%be%e8%ae%a1.htm#comments</comments>
		<pubDate>Tue, 13 Jan 2009 05:47:13 +0000</pubDate>
		<dc:creator>Cherami</dc:creator>
				<category><![CDATA[设计]]></category>
		<category><![CDATA[Google]]></category>

		<guid isPermaLink="false">http://www.jiehoo.com/google%e5%bc%8f%e8%ae%be%e8%ae%a1.htm</guid>
		<description><![CDATA[今天看到的，觉得不错，转帖下备忘：
1、关注人&#8212;&#8212;他们的生活，他们的工作，他们的梦想。 
2、每一毫秒都至关重要。 
3、简洁是有力的。 
4、吸引新人，诱惑专家。 
5、勇于创新。 
6、设计放眼世界。 
7、当下与未来的业务并重。 
8、让人眼前一亮，又不会心有旁骛。 
9、对得起人民的信任。 
10、融入人性接触。
原文在这里。
]]></description>
			<content:encoded><![CDATA[<p class='fp'>今天看到的，觉得不错，转帖下备忘：</p>
<p>1、关注人&mdash;&mdash;他们的生活，他们的工作，他们的梦想。 <br />
2、每一毫秒都至关重要。 <br />
3、简洁是有力的。 <br />
4、吸引新人，诱惑专家。 <br />
5、勇于创新。 <br />
6、设计放眼世界。 <br />
7、当下与未来的业务并重。 <br />
8、让人眼前一亮，又不会心有旁骛。 <br />
9、对得起人民的信任。 <br />
10、融入人性接触。</p>
<p><a href="http://www.yeeyan.com/articles/view/imacg4/23295">原文在这里</a>。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jiehoo.me/google%e5%bc%8f%e8%ae%be%e8%ae%a1.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>代码生成工具的基本设想</title>
		<link>http://www.jiehoo.me/%e4%bb%a3%e7%a0%81%e7%94%9f%e6%88%90%e5%b7%a5%e5%85%b7%e7%9a%84%e5%9f%ba%e6%9c%ac%e8%ae%be%e6%83%b3.htm</link>
		<comments>http://www.jiehoo.me/%e4%bb%a3%e7%a0%81%e7%94%9f%e6%88%90%e5%b7%a5%e5%85%b7%e7%9a%84%e5%9f%ba%e6%9c%ac%e8%ae%be%e6%83%b3.htm#comments</comments>
		<pubDate>Tue, 06 Dec 2005 17:21:36 +0000</pubDate>
		<dc:creator>Cherami</dc:creator>
				<category><![CDATA[设计]]></category>

		<guid isPermaLink="false">http://www.jiehoo.com/%e4%bb%a3%e7%a0%81%e7%94%9f%e6%88%90%e5%b7%a5%e5%85%b7%e7%9a%84%e5%9f%ba%e6%9c%ac%e8%ae%be%e6%83%b3.htm</guid>
		<description><![CDATA[现在正在使用spring+hibernate+struts完成一个项目，在做这个的过程中发现我们很多时候的工作都花在了基本的可以代码生成的
javabean创建、form创建，页面创建，action创建，DAO创建上，其实这些工作都是可以不用人工完成的。看了一下appfuse，感觉使
用起来还不是很方便，打算自己做一个简单的生成器，初步计划是使用xstream+freemarker，系统的字段、页面、action什么的简单的写
一个xml文件，然后写一些代码模板就可以了（包括javabean，hbm.xml，DAO，Action，Form，JSP以及struts、
spring和validation的基本配置），另外还会包含一个基本的空白工程，有一些共通的功能。如果是业余时间做的话估计需要一个月左右的时间。
等手头的这个项目做完就开始做了。
]]></description>
			<content:encoded><![CDATA[<p class='fp'>现在正在使用spring+hibernate+struts完成一个项目，在做这个的过程中发现我们很多时候的工作都花在了基本的可以代码生成的<br />
javabean创建、form创建，页面创建，action创建，DAO创建上，其实这些工作都是可以不用人工完成的。看了一下appfuse，感觉使<br />
用起来还不是很方便，打算自己做一个简单的生成器，初步计划是使用xstream+freemarker，系统的字段、页面、action什么的简单的写<br />
一个xml文件，然后写一些代码模板就可以了（包括javabean，hbm.xml，DAO，Action，Form，JSP以及struts、<br />
spring和validation的基本配置），另外还会包含一个基本的空白工程，有一些共通的功能。如果是业余时间做的话估计需要一个月左右的时间。<br />
等手头的这个项目做完就开始做了。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jiehoo.me/%e4%bb%a3%e7%a0%81%e7%94%9f%e6%88%90%e5%b7%a5%e5%85%b7%e7%9a%84%e5%9f%ba%e6%9c%ac%e8%ae%be%e6%83%b3.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>系统的基本设想</title>
		<link>http://www.jiehoo.me/%e7%b3%bb%e7%bb%9f%e7%9a%84%e5%9f%ba%e6%9c%ac%e8%ae%be%e6%83%b3.htm</link>
		<comments>http://www.jiehoo.me/%e7%b3%bb%e7%bb%9f%e7%9a%84%e5%9f%ba%e6%9c%ac%e8%ae%be%e6%83%b3.htm#comments</comments>
		<pubDate>Sun, 23 Oct 2005 03:41:43 +0000</pubDate>
		<dc:creator>Cherami</dc:creator>
				<category><![CDATA[设计]]></category>

		<guid isPermaLink="false">http://www.jiehoo.com/%e7%b3%bb%e7%bb%9f%e7%9a%84%e5%9f%ba%e6%9c%ac%e8%ae%be%e6%83%b3.htm</guid>
		<description><![CDATA[上次提到要重写JR的系统，其实最想做的还是底层的框架。
这几年看了或者用了很多东西，最开始了解并深入学习的就是jive，以后还有junit，spring以及hibernate，都是让我感觉比较好的东
西，然后在工作的过程中看到别人设计的各种框架，感觉都有很多优点，但是使用起来又不是那么舒服，因此想总结一下自己的经验，看看能不能做一个让自己满意
的系统。
其实做这个系统的最开始的出发点就是嫌各种东西比较麻烦，第一就是代码重复，第二就是需要一些学习成本，第三有些不太直观，第四就是麻烦。
我考虑的第一个出发点就是减少配置，使用规则替代，这样可以避免一些前后不符的情况，对于以后的维护比较好；
第二就是简单，使用的技术的门槛尽量低，类合理的少。
第三就是尽量直观易用，尽可能提供一步到位的功能。
系统的核心是javabean，或者是POJO，他是数据库操作和页面表现层的核心，数据库的内容可以直接提取出来变成javabean，页面也可以使用
javabean完成数据表现，web请求中的参数直接填写到javabean中，数据库的持久不是自动的，但是只需要调用API触发一下。
目前系统的各个部分的设计还没有考虑好，有些甚至还没有确定能否解决，需要慢慢的细化，也许需要找几个人一起来做。
]]></description>
			<content:encoded><![CDATA[<p class='fp'>上次提到要重写JR的系统，其实最想做的还是底层的框架。<br />
这几年看了或者用了很多东西，最开始了解并深入学习的就是jive，以后还有junit，spring以及hibernate，都是让我感觉比较好的东<br />
西，然后在工作的过程中看到别人设计的各种框架，感觉都有很多优点，但是使用起来又不是那么舒服，因此想总结一下自己的经验，看看能不能做一个让自己满意<br />
的系统。</p>
<p>其实做这个系统的最开始的出发点就是嫌各种东西比较麻烦，第一就是代码重复，第二就是需要一些学习成本，第三有些不太直观，第四就是麻烦。<br />
我考虑的第一个出发点就是减少配置，使用规则替代，这样可以避免一些前后不符的情况，对于以后的维护比较好；<br />
第二就是简单，使用的技术的门槛尽量低，类合理的少。<br />
第三就是尽量直观易用，尽可能提供一步到位的功能。</p>
<p>系统的核心是javabean，或者是POJO，他是数据库操作和页面表现层的核心，数据库的内容可以直接提取出来变成javabean，页面也可以使用<br />
javabean完成数据表现，web请求中的参数直接填写到javabean中，数据库的持久不是自动的，但是只需要调用API触发一下。</p>
<p>目前系统的各个部分的设计还没有考虑好，有些甚至还没有确定能否解决，需要慢慢的细化，也许需要找几个人一起来做。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jiehoo.me/%e7%b3%bb%e7%bb%9f%e7%9a%84%e5%9f%ba%e6%9c%ac%e8%ae%be%e6%83%b3.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>想重写JR的系统</title>
		<link>http://www.jiehoo.me/%e6%83%b3%e9%87%8d%e5%86%99jr%e7%9a%84%e7%b3%bb%e7%bb%9f.htm</link>
		<comments>http://www.jiehoo.me/%e6%83%b3%e9%87%8d%e5%86%99jr%e7%9a%84%e7%b3%bb%e7%bb%9f.htm#comments</comments>
		<pubDate>Wed, 19 Oct 2005 05:56:41 +0000</pubDate>
		<dc:creator>Cherami</dc:creator>
				<category><![CDATA[设计]]></category>

		<guid isPermaLink="false">http://www.jiehoo.com/%e6%83%b3%e9%87%8d%e5%86%99jr%e7%9a%84%e7%b3%bb%e7%bb%9f.htm</guid>
		<description><![CDATA[一直都在考虑是否重写JR的系统，主要的原因就是目前JR的系统已经比较乱了，数据库方面的代码已经有三套了，由于没有写过单元测试的代码，因此全部更新
为一套是不太可能的；另外就是缓存的管理已经有些混乱了，有些是进行缓存的，有些没有，有些出于性能的考虑改用了自定义的缓存形式；想增加某些功能的时候
不太好加，因为对系统的损伤太大，这个已经在我的JR缓存系统的思考中提到过；页面的代码也不理想，重复的代码太多了，要进行某种改动，为了统一需要改动很多地方，这个也是历史遗留问题。
另外一个很重要的原因是想试验一下自己积累的代码，验证一下自己的一些想法。如果重写，肯定要重新设计一些底层的东西，简化类似系统的开发并且简化代码，争取消除大部分的重复代码（类似的问题在JIVE中也是同样存在）。
这段时间可能会整理一些想法，更加清晰的表达出来，也相当于进行设计了吧。
]]></description>
			<content:encoded><![CDATA[<p class='fp'>一直都在考虑是否重写JR的系统，主要的原因就是目前JR的系统已经比较乱了，数据库方面的代码已经有三套了，由于没有写过单元测试的代码，因此全部更新<br />
为一套是不太可能的；另外就是缓存的管理已经有些混乱了，有些是进行缓存的，有些没有，有些出于性能的考虑改用了自定义的缓存形式；想增加某些功能的时候<br />
不太好加，因为对系统的损伤太大，这个已经在我的<a href="http://blog.javaresearch.org/page/cherami/20051014#jr%E7%BC%93%E5%AD%98%E7%B3%BB%E7%BB%9F%E7%9A%84%E6%80%9D%E8%80%83">JR缓存系统的思考</a>中提到过；页面的代码也不理想，重复的代码太多了，要进行某种改动，为了统一需要改动很多地方，这个也是历史遗留问题。</p>
<p>另外一个很重要的原因是想试验一下自己积累的代码，验证一下自己的一些想法。如果重写，肯定要重新设计一些底层的东西，简化类似系统的开发并且简化代码，争取消除大部分的重复代码（类似的问题在JIVE中也是同样存在）。</p>
<p>这段时间可能会整理一些想法，更加清晰的表达出来，也相当于进行设计了吧。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jiehoo.me/%e6%83%b3%e9%87%8d%e5%86%99jr%e7%9a%84%e7%b3%bb%e7%bb%9f.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JR缓存系统的思考</title>
		<link>http://www.jiehoo.me/jr%e7%bc%93%e5%ad%98%e7%b3%bb%e7%bb%9f%e7%9a%84%e6%80%9d%e8%80%83.htm</link>
		<comments>http://www.jiehoo.me/jr%e7%bc%93%e5%ad%98%e7%b3%bb%e7%bb%9f%e7%9a%84%e6%80%9d%e8%80%83.htm#comments</comments>
		<pubDate>Thu, 13 Oct 2005 20:05:06 +0000</pubDate>
		<dc:creator>Cherami</dc:creator>
				<category><![CDATA[设计]]></category>

		<guid isPermaLink="false">http://www.jiehoo.com/jr%e7%bc%93%e5%ad%98%e7%b3%bb%e7%bb%9f%e7%9a%84%e6%80%9d%e8%80%83.htm</guid>
		<description><![CDATA[最近增加的关键字功能可能会对JR系统的整体性能造成比较大的伤害，原因就是JR的系统中最值得称道的缓存功能的限制。
按照原来的情况，JR的缓存系统在90％的情况下会工作得很好，这个和系统的特点有关。
JR的用户，很多是按照我们的页面给出的顺序查看我们的内容，当然也有一些是通过各种搜索引擎搜索得到某个内容，但是按照比例而言，按照顺序浏览的可能比较多，因此大部分的人查看的内容都在缓存中，不在缓存中的内容会再到数据库取，因此系统的效率比较高。
而在增加了关键字功能后，关键字相关的文章列表中的内容很可能不在我们的缓存中，因此要把文章相关的内容都从数据库中取出来，这个时候缓存的功能就没有发挥应用的作用甚至成为了负担，因为缓存的内容的频繁交换在这种情况下做了很多无用功。
其实这个问题并非不能解决，甚至可以增加各种排序功能（按照目前的情况增加排序功能对系统的损害是致命的），方法就是改造缓存系统，将目前的单级缓存修改为多级缓存。
按照jive的缓存设计，每个被缓存的对象需要提供一个大小信息，而缓存管理器会维持一个大小受限的缓存池，如果采用二级缓存，内容的主要信息缓存下来（例如标题，作者，发布日期，回复数，最后更新日期，查看数，最后回复者等等），
而帖子的内容一级回复作为二级缓存的内容，按照一定的比例分配一级缓存和二级缓存的大小，而系统中经常查看的可能是内容列表而非内容，这样
缓存的功能就可以大大增加，即使把全部的帖子信息都缓存下来也是可能的，因为这个信息相对帖子的内容而言很小。
这个改造的难点在于缓存是系统的一个非常核心的功能，缓存相关的代码可能比较多，进行重构并不容易，当然应该是值得研究下的。
]]></description>
			<content:encoded><![CDATA[<p class='fp'>最近增加的关键字功能可能会对JR系统的整体性能造成比较大的伤害，原因就是JR的系统中最值得称道的缓存功能的限制。<br />
按照原来的情况，JR的缓存系统在90％的情况下会工作得很好，这个和系统的特点有关。<br />
JR的用户，很多是按照我们的页面给出的顺序查看我们的内容，当然也有一些是通过各种搜索引擎搜索得到某个内容，但是按照比例而言，按照顺序浏览的可能比较多，因此大部分的人查看的内容都在缓存中，不在缓存中的内容会再到数据库取，因此系统的效率比较高。<br />
而在增加了关键字功能后，关键字相关的文章列表中的内容很可能不在我们的缓存中，因此要把文章相关的内容都从数据库中取出来，这个时候缓存的功能就没有发挥应用的作用甚至成为了负担，因为缓存的内容的频繁交换在这种情况下做了很多无用功。</p>
<p>其实这个问题并非不能解决，甚至可以增加各种排序功能（按照目前的情况增加排序功能对系统的损害是致命的），方法就是改造缓存系统，将目前的单级缓存修改为多级缓存。<br />
按照jive的缓存设计，每个被缓存的对象需要提供一个大小信息，而缓存管理器会维持一个大小受限的缓存池，如果采用二级缓存，内容的主要信息缓存下来（例如标题，作者，发布日期，回复数，最后更新日期，查看数，最后回复者等等），<br />
而帖子的内容一级回复作为二级缓存的内容，按照一定的比例分配一级缓存和二级缓存的大小，而系统中经常查看的可能是内容列表而非内容，这样<br />
缓存的功能就可以大大增加，即使把全部的帖子信息都缓存下来也是可能的，因为这个信息相对帖子的内容而言很小。<br />
这个改造的难点在于缓存是系统的一个非常核心的功能，缓存相关的代码可能比较多，进行重构并不容易，当然应该是值得研究下的。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jiehoo.me/jr%e7%bc%93%e5%ad%98%e7%b3%bb%e7%bb%9f%e7%9a%84%e6%80%9d%e8%80%83.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JR的关键字功能设计</title>
		<link>http://www.jiehoo.me/jr%e7%9a%84%e5%85%b3%e9%94%ae%e5%ad%97%e5%8a%9f%e8%83%bd%e8%ae%be%e8%ae%a1.htm</link>
		<comments>http://www.jiehoo.me/jr%e7%9a%84%e5%85%b3%e9%94%ae%e5%ad%97%e5%8a%9f%e8%83%bd%e8%ae%be%e8%ae%a1.htm#comments</comments>
		<pubDate>Tue, 11 Oct 2005 04:11:17 +0000</pubDate>
		<dc:creator>Cherami</dc:creator>
				<category><![CDATA[设计]]></category>

		<guid isPermaLink="false">http://www.jiehoo.com/jr%e7%9a%84%e5%85%b3%e9%94%ae%e5%ad%97%e5%8a%9f%e8%83%bd%e8%ae%be%e8%ae%a1.htm</guid>
		<description><![CDATA[目前JR的关键字功能比较简单，一个关键字实际上由并列的几个关键字构成，例如ioc，di以及控制反转都是作为同样的关键字对待的，每篇文章包含的每个
关键字都是有权重的，权重的算法目前也非常的简单，如果是标题中包含关键字，那么权重是出现的次数X关键字的长度X5，如果正文中包含关键字，那么权重是
出现的次数X关键字的长度，如果标题中包含某个关键字，那么正文中的同一关键字的权重将再乘以2，目前看，对于单一关键字这个权重的结果还是比较好的，基
本上能够反映出所有文章中和关键字的匹配程度。对于英文的单词，目前是全词匹配的，否则误判很高，例如di这个关键字，很多单词都包含这个字母序列，而我
们在判断是否包含关键字的时候都是转换为小写进行处理的。
目前正在开发中的是文章相关性功能，初步的设想是从原文章中取出其权重最高的五个关键字，然后看看其它的包含这些关键字的文章，其权重的和最高的就认为是
最相关的，目前看结果不是很理想，可能对于原文章中的关键字的权重大小不同对目前文章的关键字的权重进行相应的处理后得到的才能是比较好的结果。但是这个
也需要检验。
]]></description>
			<content:encoded><![CDATA[<p class='fp'>目前JR的关键字功能比较简单，一个关键字实际上由并列的几个关键字构成，例如ioc，di以及控制反转都是作为同样的关键字对待的，每篇文章包含的每个<br />
关键字都是有权重的，权重的算法目前也非常的简单，如果是标题中包含关键字，那么权重是出现的次数X关键字的长度X5，如果正文中包含关键字，那么权重是<br />
出现的次数X关键字的长度，如果标题中包含某个关键字，那么正文中的同一关键字的权重将再乘以2，目前看，对于单一关键字这个权重的结果还是比较好的，基<br />
本上能够反映出所有文章中和关键字的匹配程度。对于英文的单词，目前是全词匹配的，否则误判很高，例如di这个关键字，很多单词都包含这个字母序列，而我<br />
们在判断是否包含关键字的时候都是转换为小写进行处理的。</p>
<p>目前正在开发中的是文章相关性功能，初步的设想是从原文章中取出其权重最高的五个关键字，然后看看其它的包含这些关键字的文章，其权重的和最高的就认为是<br />
最相关的，目前看结果不是很理想，可能对于原文章中的关键字的权重大小不同对目前文章的关键字的权重进行相应的处理后得到的才能是比较好的结果。但是这个<br />
也需要检验。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jiehoo.me/jr%e7%9a%84%e5%85%b3%e9%94%ae%e5%ad%97%e5%8a%9f%e8%83%bd%e8%ae%be%e8%ae%a1.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>基于规则还是基于配置</title>
		<link>http://www.jiehoo.me/%e5%9f%ba%e4%ba%8e%e8%a7%84%e5%88%99%e8%bf%98%e6%98%af%e5%9f%ba%e4%ba%8e%e9%85%8d%e7%bd%ae.htm</link>
		<comments>http://www.jiehoo.me/%e5%9f%ba%e4%ba%8e%e8%a7%84%e5%88%99%e8%bf%98%e6%98%af%e5%9f%ba%e4%ba%8e%e9%85%8d%e7%bd%ae.htm#comments</comments>
		<pubDate>Tue, 27 Sep 2005 20:36:56 +0000</pubDate>
		<dc:creator>Cherami</dc:creator>
				<category><![CDATA[设计]]></category>

		<guid isPermaLink="false">http://www.jiehoo.com/%e5%9f%ba%e4%ba%8e%e8%a7%84%e5%88%99%e8%bf%98%e6%98%af%e5%9f%ba%e4%ba%8e%e9%85%8d%e7%bd%ae.htm</guid>
		<description><![CDATA[一直一来都在思索为什么很多公司开发的产品都不好维护，也一直在思考如何设计一个可以快速开发和快速上手的框架，并且用该框架开发的东西要易于维护。
前几天在思考spring的IoC其实也并不是很好的解决方案，虽然他将类之间的依赖关系延迟到了运行时，做到了降低系统的偶合度，但是同时意味着对于一
个新人而言，它在理解这个系统的时候会存在很多问题，特别是系统的设计文档缺失或者不完善的情况下。国内的程序员似乎都不太喜欢写文档，有时候也认为代码
很简单，根本不需要文档，甚至很多连代码注释都没有，在这样的情况你如何希望别人可以很快入手呢？
前两天在改造我的JDBCTemplate的过程中，在完成数据的持久化时，突然想到与其基于配置，不如基于规则，符合规则的就可以通过，不符合的就不
行，例如从数据库取出的数据可以自动映射到javabean，数据库的命名使用下划线分隔，而转换到java的属性就是以下划线分隔的单词，除了第一个单
词外的其它的首字母大写，而对于表间关系，可以也按照命名规范来，对于一对多的关系，可以利用JDK5中的新的特性声明其类型完成。
在基于规则的情况下，配置会减少很多，但是文档依然是不可缺少的，不同的是文档要描述的主要是规则，而这个规则是框架的规则，新人需要研读的就是这个规则，他也不能写出不符合规则的程序，因为那样就不能工作。
有必要实际的检验一下这个想法。
]]></description>
			<content:encoded><![CDATA[<p class='fp'>一直一来都在思索为什么很多公司开发的产品都不好维护，也一直在思考如何设计一个可以快速开发和快速上手的框架，并且用该框架开发的东西要易于维护。<br />
前几天在思考spring的IoC其实也并不是很好的解决方案，虽然他将类之间的依赖关系延迟到了运行时，做到了降低系统的偶合度，但是同时意味着对于一<br />
个新人而言，它在理解这个系统的时候会存在很多问题，特别是系统的设计文档缺失或者不完善的情况下。国内的程序员似乎都不太喜欢写文档，有时候也认为代码<br />
很简单，根本不需要文档，甚至很多连代码注释都没有，在这样的情况你如何希望别人可以很快入手呢？<br />
前两天在改造我的JDBCTemplate的过程中，在完成数据的持久化时，突然想到与其基于配置，不如基于规则，符合规则的就可以通过，不符合的就不<br />
行，例如从数据库取出的数据可以自动映射到javabean，数据库的命名使用下划线分隔，而转换到java的属性就是以下划线分隔的单词，除了第一个单<br />
词外的其它的首字母大写，而对于表间关系，可以也按照命名规范来，对于一对多的关系，可以利用JDK5中的新的特性声明其类型完成。<br />
在基于规则的情况下，配置会减少很多，但是文档依然是不可缺少的，不同的是文档要描述的主要是规则，而这个规则是框架的规则，新人需要研读的就是这个规则，他也不能写出不符合规则的程序，因为那样就不能工作。<br />
有必要实际的检验一下这个想法。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jiehoo.me/%e5%9f%ba%e4%ba%8e%e8%a7%84%e5%88%99%e8%bf%98%e6%98%af%e5%9f%ba%e4%ba%8e%e9%85%8d%e7%bd%ae.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
