??xml version="1.0" encoding="utf-8" standalone="yes"?>
对于B/Sl构的企业应用Y件来_基本的页面不外两U,一U是填Form的,一U是DataGrid 数据列表理的,再配合一些css, js, ajax的效果,是View层要x的东西了?
阅读全文
]]>
1Q分层开发不同的开发h员关注他们擅长的特定层面Q有助于开发优质的pȝ。因为很有E序员可以精通从JSQCSSQDHTML到struts再到 hibernate直至最后的数据库设计这一整套开发流E所要用到的所有技术。大家各司其职,全力x自己擅长的层面,q要比一个h或一个小l负责某一模块从页面到最底层的开发方式要好的多?
2Q?分层分离了逻辑Q得系l结构层ơ明晎ͼpȝ变得灉|和易于维护。开发h员应该尽量ɾpȝ的各层之间保持相对独立的松耦合状态,q是实现分层的必要条Ӟ也是构徏良构pȝ的重要保证?
阅读全文
]]>
MVC不就是把M、V、C分开么?臛_物朴素的做法是两个JSP一个负责ViewQ一个负责ControllerQ再加一个负责Model的Java BeanQ已l可以工作得很好Q那时候一切都很简单?
而现在ؓ了一些不是本质的功能Q冒么多非标准的Web框架Q实在让Z阵郁闗像Ruby On Rails那样捷开发,可用可不用,而且没有太多的限刉要学习的Q比如Webworkq型q可以考虑。但像Struts那样用框架麻烦,或者像Tapestry那样有严重自闭們Q额上凿着"高手专用玩具"的,用在团队里就是不负责ȝ行ؓ了?
阅读全文
]]>
但Appfuse的model层d有一个DAO接口、一个DAOImplcR一个Service接口、一个ServiceImplcR一个DataObject.....大概只有受惯了虐待的人才会欣然接受吧?
另外QDomain-Driven逢初一、十五也会被拿出来讨Z遍?
其实无论什么模式,都不q是一Uh为的划分、抽象和装。只要在团队里理解一_自我感觉优雅p了?
我的是,一开始DO和Manager一生一旦包演全场,DO作ؓU数据蝲体,而ManagercL|商业方法,?getHibernateTemplate()直接讉K数据库,不强制基于接口编E。当某天pȝ复杂C直觉上需要将DAO层和Service层分开Ӟ再分开好了?
阅读全文
]]>
所以,Pramatic_不灭。这个系列就是探L适合自己的Spring+Hibernate模式?
I-配置文g?
我厌倦一切配|文件繁重的框架?
最好的情况是,框架提供极端灉|复杂的配|方式,但只在你需要的时候?
Spring提供了三U可能来化XML。随着国内用户水^的提高,q些基本的简化技巧大安已掌握?
阅读全文
]]>
1. 下蝲EMF、GEF、JEM、WTP?
其中前面三个是安装WTP所必须要先装的Q不然只装一个WTP是没有用的。这四个都可以在Eclipse的官|上扑ֈ。对应的版本关系如下Q?
eclipse 3.2QEMF 2.2、GEF 3.2、JEM 1.2、WTP 1.5
eclilpse 3.3QEMF 2.3、GEF 3.3、JEM 1.5、WTP 2.0
阅读全文
]]>
本文主要讨论 Server Side ( 针对 Java Language) 的显C层技术,然后q一步讨?Browser Side Q?Ajax Q的昄层技术(一个典型的 Ajax 应用也分?Model, View, Controller ?Data, HTML/CSS, JavaScript Q。注意,本文关于 Ajax 的讨论只有很一部分Q因为我不擅长这个领域。只是一个顺便的扩展比较?
一个很有趣的现象?Server Side ?Browser Side 的显C层技术格局恰好相反?Server Side ?Scripted Template 技术比较多Q比较流行;?Browser Side ?HTML DOM Manipulation 技术?HTML View Model 技术比较多Q比较流行?
阅读全文
]]>
1. 在客L调用dataset1.flushData()Ӟ会到服务端调用该ViewModel实现cȝdoLoadData()Q如果doLoadData()Ҏ里还有其它DatasetQ如
Dataset dataset2 = getDataset("dataset2");
Dataset dataset3 = getDataset("dataset3");
2. 在客LQdataset.setValue("str")Ҏ会再ơ触发afterChange事gQ如果在afterChange里直接调用dataset.setValue()生死循环Q应?
//disableEventsQ禁止数据集触发用户事g
dataset.disableEvents();
dataset.setValue("contractStatus",1);
//enableEventsQ允许数据集触发用户事g
dataset.enableEvents();
]]>
]]>
build.xml中target数量很多Q而且之间的依赖关pd杂,有必要做个整理。我现在只是把所有target的关pȝ清了一下,至于每个target里面每一步的操作以后再来看?br />
AppFuse的target依赖关系?以下都是target的nameQ箭头表C后者依赖于前?
-init --> prepare --> copy-resources -->
stage-web -------------------------------------->
--> copy-web-files -->
--> compile-dao --> package-dao --> compile-service --> package-service --> compile-web -- > webdoclet --> jsp-2 --> compile-jsp --> deploy-web
--> package-web --> war
--> deploy
--> deploy-war
--> install
--> gen-forms ---------------------------------------------------------------->
--> db-export
--> db-load
--> java2html --> javadoc
--> checkstyle
--> pmd
--> db-create
--> setup-tomcat
--> fixcrlf
- test-reports --> deploy-test-reports
- test-all-running
- ping-tomcat
- db-prepare
- db-drop
- undeploy
- emma
- todo
- with-debug -->
check-debug --> start.tomcat
- no-debug -->
-remove
-reload
-start
-drop
-list
-wiki -->
dist
-clean -->
*************************************************************
其余的target
webdoclet -->
db-load --> test-web -->
check-debug -->
copy-resources -->
package-dao -->
db-load --> test-dao -->
check-debug -->
test-all
copy-resources -->
compile-service --> test-service -->
check-debug -->
war -->
test-jsp -->
check-debug -->
db-create -->
db-prepare --> setup-db
db-load -->
ping-tomcat -->
db-load --> test-canoo
compile-web -->
undeploy -->
clean --> refesh
deploy -->
javadoc -->
todo -->
checkstyle --> docs
pmd -->
clean -->
bin
package-web -->
setup-db -->
setup-tomcat --> setup
deploy -->
clean -->
new
init -->
实在是很乱,试了好几个方法,q是q样写出来相Ҏ楚点。compile-web和webdoclet那儿换了个行Qcompile-web依赖于stage-web、package-service、gen-forms?br />
整个Ant Project的default target是package-webQ实际上q个关系图也是AppFuse的部|流E,实很大啊?/p>
那么IoC是如何做的呢Q有点像通过婚介扑֥朋友Q在我和x友之间引入了一个第三者:婚姻介绍所。婚介管理了很多L奛_的资料,我可以向婚介提出一个列表,告诉它我x个什么样的女朋友Q比如长得像李嘉ƣ,w材像林熙雷Q唱歌像周杰伦,速度像卡z斯Q技术像齐达内之cȝQ然后婚介就会按照我们的要求Q提供一个mmQ我们只需要去和她谈恋爱、结婚就行了。简单明了,如果婚介l我们的人选不W合要求Q我们就会抛出异常。整个过E不再由我自己控Ӟ而是有婚介这样一个类似容器的机构来控制。Spring所倡导的开发方式就是如此,所有的c都会在spring容器中登讎ͼ告诉spring你是个什么东西,你需要什么东西,然后spring会在pȝq行到适当的时候,把你要的东西dl你Q同时也把你交给其他需要你的东ѝ所有的cȝ创徏、销毁都?spring来控Ӟ也就是说控制对象生存周期的不再是引用它的对象Q而是spring。对于某个具体的对象而言Q以前是它控制其他对象,现在是所有对象都被spring控制Q所以这叫控制反转。如果你q不明白的话Q我军_攑ּ?/p>
IoC的一个重Ҏ在系l运行中Q动态的向某个对象提供它所需要的其他对象。这一Ҏ通过DIQDependency InjectionQ依赖注入)来实现的。比如对象A需要操作数据库Q以前我们L要在A中自q写代码来获得一个Connection对象Q有?spring我们只需要告诉springQA中需要一个ConnectionQ至于这个Connection怎么构造,何时构造,A不需要知道。在pȝq行Ӟspring会在适当的时候制造一个ConnectionQ然后像打针一P注射到A当中Q这样就完成了对各个对象之间关系的控制。A需要依?Connection才能正常q行Q而这个Connection是由spring注入到A中的Q依赖注入的名字p么来的。那么DI是如何实现的呢? Java 1.3之后一个重要特征是反射QreflectionQ,它允许程序在q行的时候动态的生成对象、执行对象的Ҏ、改变对象的属性,spring是通过反射来实现注入的?/p>
如果q不明白Q放弃java吧!