??xml version="1.0" encoding="utf-8" standalone="yes"?>
struts
控制用的
hibernate
操作数据库的
spring
用解耦的
详细的说Q?/span>
STRUTS
?/span>
SSH
框架中v控制的作?/span>
,
其核心是
Controller,
?/span>
ActionServlet,
?/span>
ActionServlet
的核心就?/span>
Struts-confi g.xml.
主要控制逻辑关系的处?/span>
.
hibernate
是数据持久化?/span>
,
是一U新的对象、关pȝ映射工具
,
提供了从
Java
cd数据表的映射Q也提供了数据查询和恢复{机?/span>
,
大大减少数据讉K的复杂度。把Ҏ(gu)据库的直接操?/span>
,
转换为对持久对象的操?/span>
.
Struts
?/span>
spring
?/span>
Hibernate
在各层的作用
1
Q?/span>
struts
负责
web
?/span>
.
ActionFormBean
接收|页中表单提交的数据Q然后通过
Action
q行处理Q再
Forward
到对应的|页?/span>
?/span>
struts-config.xml
中定?/span>
<action-mapping>, ActionServlet
?x)加载?/span>
2
Q?/span>
spring
负责业务层管理,?/span>
Service
Q或
Manager).
1
Q?/span>
service
?/span>
action
提供l计的调用接口,装持久层的
DAO.
2
Q可以写一些自q业务Ҏ(gu)?/span>
3
Q统一?/span>
javabean
理Ҏ(gu)
4
Q声明式事务理
5.
集成
Hiberante
3
Q?/span>
Hiberante
Q负责持久化层,完成数据库的
crud
操作
hibernate
为持久层Q提?/span>
OR/Mapping
?/span>
它有一l?/span>
.hbm.xml
文g?/span>
POJO,
是跟数据库中的表相对应的。然后定?/span>
DAO
Q这些是跟数据库打交道的c,它们?x)?/span>
PO
?/span>
?/span>
struts+spring+hibernate
的系l中Q?/span>
对象的调用流E是Q?/span>
jsp-> Action
Q?/span>
> Service ->DAO ->Hibernate
?/span>
数据的流向是
ActionFormBean
接受用户的数据,
Action
数据从
ActionFromBean
中取出,装?/span>
VO
?/span>
PO,
再调用业务层?/span>
Bean
c,完成各种业务处理后再
forward
。而业务层
Bean
收到q个
PO
对象之后Q会(x)调用
DAO
接口Ҏ(gu)Q进行持久化操作?/span>
2 具体语法
所有javadoc命o(h)都只能出C?**”注释中。但和^怸P注释l束于一个?/”。主要通过两种方式来用javadocQ嵌入的HTMLQ或使用“文档标记”。其中,“文档标记”(Doc tagsQ是一些以“@”开头的命o(h)Q置于注释行的v始处Q但前导的?”会(x)被忽略)?
有三U类型的注释文Q它们对应于位于注释后面的元素:(x)cR变量或者方法。也是_(d)一个类注释正好位于一个类定义之前Q变量注释正好位于变量定义之前;而一个方法定义正好位于一个方法定义的前面。如下面q个单的例子所C:(x)
/** 一个类注释 */
public class docTest {
/** 一个变量注?*/
public int i;
/** 一个方法注?*/
public void f() {}
}
注意javadoc只能为publicQ公共)和protectedQ受保护Q成员处理注释文。“private”(U有Q和“友好”(详见5章)成员的注释会(x)被忽略,我们看不CQ何输出(也可以用-private标记包括private成员Q。这样做是有道理的,因ؓ(f)只有public和protected成员才可在文件之外用,q是客户E序员的希望。然而,所有类注释都会(x)包含到输出结果里?
上述代码的输出是一个HTML文gQ它与其他Java文h相同的标准格式。因此,用户?x)非常熟?zhn)这U格式,可在(zhn)设计的cM方便地“O游”。设计程序时Q请务必考虑输入上述代码Q用javadoc处理一下,观看最lHTML文g的效果如何?
3 嵌入HTML
javadocHTML命o(h)传递给最l生成的HTML文档。这便我们能够充分利用HTML的巨大威力。当Ӟ我们的最l动机是格式化代码,不是Z哗众取宠。下面列Z个例子:(x)
/**
*
* System.out.println(new Date());
*
*/
亦可象在其他Web文档里那栯用HTMLQ对普通文本进行格式化Q其更h理、更加美观:(x)
/**
* (zhn)甚臛_以插入一个列表:(x)
*
*
目一
*
目?
*
目?
*
*/
注意在文档注释中Q位于一行最开头的星号?x)被javadoc丢弃。同时丢弃的q有前导I格。javadoc?x)对所有内容进行格式化Q其与标准的文外观相W。不要将
?
q样的标题当作嵌入HTML使用Q因为javadoc?x)插入自q标题Q我们给出的标题?x)与之冲撞?
所有类型的注释文——类、变量和Ҏ(gu)——都支持嵌入HTML?
4 @seeQ引用其他类
所有三U类型的注释文都可包含@see标记Q它允许我们引用其他c里的文。对于这个标讎ͼjavadoc?x)生成相应的HTMLQ将其直接链接到其他文。格式如下:(x)
@see cd
@see 完整cd
@see 完整cd
每一格式都会(x)在生成的文里自动加入一个超链接的“See Also”(参见Q条目。注意javadoc不会(x)查我们指定的链接,不会(x)验证它们是否有效?
5 cL档标?
随同嵌入HTML和@see引用Q类文档q可以包括用于版本信息以?qing)作者姓名的标记。类文亦可用于“接口”目的(本书后面?x)详l解释)?
1. @version
格式如下Q?
@version 版本信息
其中Q“版本信息”代表Q何适合作ؓ(f)版本说明的资料。若在javadoc命o(h)行用了?version”标讎ͼ׃(x)从生成的HTML文里提取出版本信息?
2. @author
格式如下Q?
@author 作者信?
其中Q“作者信息”包括?zhn)的姓名、电(sh)子函件地址或者其他Q何适宜的资料。若在javadoc命o(h)行用了?author”标讎ͼ׃(x)专门从生成的HTML文里提取出作者信息?
可ؓ(f)一pd作者用多个这L(fng)标记Q但它们必须q箋攄。全部作者信息会(x)一起存入最lHTML代码的单独一个段落里?
6 变量文档标记
变量文只能包括嵌入的HTML以及(qing)@see引用?
7 Ҏ(gu)文标记
除嵌入HTML和@see引用之外Q方法还允许使用针对参数、返回g?qing)违例的文标记?
1. @param
格式如下Q?
@param 参数?说明
其中Q“参数名”是指参数列表内的标识符Q而“说明”代表一些可延箋到后l行内的说明文字。一旦遇C个新文档标记Q就认ؓ(f)前一个说明结束。可使用L数量的说明,每个参数一个?
2. @return
格式如下Q?
@return 说明
其中Q“说明”是指返回值的含义。它可gl到后面的行内?
3. @exception
有关“违例”(ExceptionQ的详细情况Q我们会(x)在第9章讲q。简a之,它们是一些特D的对象Q若某个Ҏ(gu)p|Q就可将它们“扔出”对象。调用一个方法时Q尽只有一个违例对象出玎ͼ但一些特D的Ҏ(gu)也许能生Q意数量的、不同类型的q例。所有这些违例都需要说明。所以,q例标记的格式如下:(x)
@exception 完整cd 说明
其中Q“完整类名”明指定了一个违例类的名字,它是在其他某个地方定义好的。而“说明”(同样可以延箋C面的行)告诉我们Z么这U特D类型的q例?x)在?gu)调用中出现?
4. @deprecated
q是Java 1.1的新Ҏ(gu)。该标记用于指出一些旧功能已由改进q的新功能取代。该标记的作用是用户不必再用一U特定的功能Q因为未来改版时可能摒弃q一功能。若一个方法标Cؓ(f)@deprecatedQ则使用该方法时?x)收到编译器的警告?/p>
在寻找优U的指挥的时候,(zhn)首先要扄是一名优U的音乐演奏家。但q每个音乐演奏安能成ZU的指挥。架构师的专业发展方面也与此cM。越来越多的 IT l织开始认识到良好软g体系l构的重要性,架构师职业正q速发展ؓ(f) IT 内一个独立的门类。由于要从相当小的候选范围内招募架构师,因此q就l管理带来了一些新挑战。即使h力资源部门找C候选者,针对l验q行的筛选也比其他门cLZ根{跨这些障的最快方式是要认识到Q大部分好的架构师同时也是好的开发h员,因此L架构师h才时可能首先应该从普通开发h员中找v。招聘h员在对候选?内部或外?q行详细审查Ӟ应该考虑q个观点。不q,Ҏ(gu)资源q行挑选可能比较麻烦,因ؓ(f)只有极少的优U开发h员具有成为架构师的特征或愿望?/p>
本文列出了开发h员成为架构师要进行的工作。我从可能考虑q行此{型的开发h员和评估q行此{型的开发h员的l理q两个方面来探讨q一问题。我q将提供一pd在做些决{时要考虑的因素?/p>
个h特征
软g开发团队和理层之间的联系始终?IT 中的一个关键所在。二者都們于以完全不同的方式考虑l定的问题。大部分相关技?/strong>都是讨论目l理应如何跟t和解释开发h员的q度和问题。但沟通不的情况仍然非常普遍Q而且q是目p|的首要原因。好的架构师是解册个问题的最有效办法。架构师的主要责L提供开发h员和目l理之间的共用沟通媒体。他们负责让业务规则?qing)需求与工程实践?qing)限制相适应Q以保成功。以下是成功架构师的一些主要特征?/p> 愿意q有能力q行沟通:(x)在开发h员中发现架构师的最有h(hun)值标准是有效的沟通。?zhn)需要技术娴熟、经验丰富的开发h员,q样的h员需要有项目中的业务相关问题进行沟通的l历。架构师l常必须对理解方面的差距q行预计Q然后才能有所贡献。他们必L意克服困难来保技术和业务观点的融合。他们ƈ不必Ҏ(gu)见交换工作进行计划和协调;q仍然主要是目l理的工作。他们的d是确定表q系l?strong mnt="" sale0703="" www="">设计
h处理谈判l节斚w的经验:(x)架构师经帔R要负责讨论系l开发的技术折h案。优先的冲H可能会(x)带来实践限制、风险规避或可能D在各个不同业务组之间需求不同。优U的架构师能够有效地评估技术可能性,q能在不损失目的主要h(hun)值的前提下制订开发计划来处理各种利害关系和限制。这与前面讨论的沟通技能紧密相养I但同时也要体现架构师的技术能力。好的架构师候选者应该是l常帮助Ҏ(gu)争议的讨行引导的人,能够使讨论得出新的想法,而不?x)其在一个位|停滞不前?
自觉d;U极解决设计问题Q?/strong>架构师的日常工作目标l常q不明确。很多开发h员直接参考功能规范来列出d清单。架构师通常则是向这些开发h员提供所需l构的h员,以便可能提高工作效率。好的候选者不仅进行沟通方面的工作Q而且也会(x)预计各种设计问题q加以解决——通常在没有Q何具体指C的情况下自觉进行。无论所分配的职责如何,U极参与目的开发h员都有机?x)从一起工作的人员中脱颖而出?
抽象思维和分析:(x)架构师必能够理解表q模p的概念q将其变成相兛_方能够理解的目构g。他们必能够理解抽象概念,q以具体的语a对其q行沟通。开发h员中好的候选者经常要求或自己d解释开发生命周期中Ҏ(gu)h的问题。他们能q速评估各U想法ƈ其U_后箋工作的操作徏议中?/p>
开发h员经常具有很强的数学能力Q而好的架构师则們于表现出更强的口头表达能力。管理h员经常说开发h员具有“工E意识”,而这是一个用于评估架构师的非常有意义的方面。架构师应该h很强的解x术问题的能力Q但q必能够准获知更为全面的人员如何与技术交互的信息。这要求h某种形式的抽象思维(而不再是代码的细?Q这U思维能力可能较难形成?/p>
有些为,某种U别的正式教育是成ؓ(f)优秀开发h员的必备条g之一Q我q不同意q种_英论。我遇到了很多高中就辍学的优U开发h员。不q,对于体系l构设计工作Q我的个人经验以?qing)我?gu)需能力的认识都让我怿Q好的架构师通常臛_获得了一个有挑战性的学士学位?/p>
跟踪生命周期
好的架构师通常有在具备定义良好的Y件开发生命周?Software Development Life CycleQSDLC)的组l工作的l验。架构师必须理解在其所属专业内最重要的操作过E。这q不意味着需要有其他前提Q例如,q不需要高能力成熟度模?Capability Maturity ModelQCMM)U别的工作经验。好的架构师可能来自使用 SDLC 的多个小型P代的极限~程(Extreme ProgrammingQXP)Ҏ(gu)的组l。务必注意各U传lY件开发操作,?Michael A. Jackson 的方法:(x)Jackson l构~程(Jackson Structured ProgrammingQJSP)?Jackson pȝ开?Jackson System DevelopmentQJSD)。Jackson 的研I对架构师职业发展的意义像 Donald Knuth 的研I对E序员一样重要。架构师可以偏爱Ml典的、经q时间考验的Y件系l开发方法?/p>
SDLC 也可以成估架构师合适h选的有用机制。每?SDLC 阶段都具有能提供相关U烦的特征。SDLC 包含很多的变体Q但在此部分Q我用几乎所有方法的公共基础部分。下面的列表详细说明?SDLC 的各个阶D,q列Z好的架构师候选者在每个阶段表现出来的特征?/p>
架构师培d?/strong>
有些l织能比其他l织更有效地q行架构师培充R如果充分考虑到招聘此cL专业人才的困难,努力促成能鼓励开发h员发展ؓ(f)架构师的环境是非常明智的{略。但务必避免对不愿意或不适合走这条\的开发h员进行处|。组l应该ؓ(f)开发h员制订多条发展\U,包括那些愿意l箋担Q开发h员的人。对架构师而言Q资深开发h员不可或~。他们可以实现系l中最关键的模块。通过对其他开发h员进行代码检查和试支持Q他们可帮助保M软g质量Q而如果质量不能保证,即最好的体系l构也毫无用处?/p>
l织应制订个估程序,以鼓励开发h员考虑其职业目标,其中要包含体pȝ构设计的选项。应该鼓q理在其下属中L体系l构设计人才。应该实现指D划,让架构师与希望成为架构师的开发h员协作工作。应该鼓励开发h员通过参加各种协会(x)、撰写文章和参加?x)议Q从而参与到专业领域中来。通过q样参与q来Q可帮助开发h员从新的角度理解pȝQƈ帮助他们更好地就其认识进行沟通。这栯能培d提高效率的重要创新想法?/p>
l束?/strong>
开发h员一旦迈Z通向体系l构设计专业方向的第一步,可以利用很多资源来获得帮助Q其中包括很多来?IBM 的资源。有时候,此过E的最困难的部分就是第一步,而本文提供了一些线索和提示Q经理和开发h员可以利用其来评估应该鼓励哪些h努力成ؓ(f)架构师?/p>
WashingMachine(z?span lang="EN-US">)cLHousehold Appliances(家用?sh)?span lang="EN-US">)包的一部分Q那么这个类的名字ؓ(f)Q?span lang="EN-US">Household Appliances::WashingMachine。包名在左,cd在右Q中间用双冒号隔开。这U类型的cd叫:(x)路径?span lang="EN-US">(pathname)?br />
myWasher:WashingMachine
WashingMachine
(function)Q它在完成操作后要返回一个返回倹{可是指明函数的q回值及(qing)q回值的cd。上q全部的操作信息被称为操作的型构?span lang="EN-US">
3个小点“…”。这个符号叫省略W,q种省略了一个或多个属性或者操作的表示法叫做类的省略表C法?span lang="EN-US">
UML提供的扩展机Ӟ(x)它允怽创徏新的模型元素以解军_体问题。构造型用双角括号括住的名字来表示?span lang="EN-US">
|
l一建模语言Q?/span>
Unified Modeling Language
Q?/span>
UML
Q?/span>
一些术语:(x)
pȝQ?/span>
system
Q指的是g和Y件的l合体,它能提供业务问题的解x案?/span>
pȝ开发(
system development
Q是为客户徏立一个系l的q程?/span>
客户Q?/span>
client
Q是需要解决问题的人?/span>
pȝ分析员(
analyst
Q将客户所要解决的问题~制成文,q将该文{交给开发h员?/span>
开发h员(
developer
Q是Z?qing)决客户的问题而构造Y件ƈ在计机g上实施该软g的程序员?/span>
UML
的组?/span>
UML
包括了一些可以相互组合图表的囑Ş元素?/span>
1
Q类?/span>
一个类Q?/span>
class
Q是一cL一l具有类似属性和共同行ؓ(f)的事物?/span>
矩ŞҎ(gu)代表cȝ图标Q它被分?/span>
3
个区域。最上面的区域中是类名,中间区域是类的属性,最下面区域里列的是cȝ操作?/span>
举一个例子,属于z衣机(
washing machine
Q类的事物都h诸如品牌Q?/span>
brand name
Q、型P
model name
Q、序列号Q?/span>
serial number
Q和定wQ?/span>
capacity
Q等属性。这cM物的行ؓ(f)包括“加物Q?/span>
add clothes
Q”、“加z剂(
add detergent
Q”、“开机(
turn on
Q”和“取物(
remove clothes
Q”等操作?br />
2
Q对象图
对象Q?/span>
object
Q是一个类的实例,是具有具体属性值和行ؓ(f)的一个具体事物。例如,z机的品牌可能是?/span>
Laundatorium
”,型号为?/span>
Washmeister
”,序列号ؓ(f)?/span>
GL57774
”,一ơ最多可以洗涤重量ؓ(f)
对象的图标也是一个矩形,和类的图标一P但是对象名下面要带下划线。具体实例的名字位于冒号的左边而该实例所属的cd位于冒号的右辏V?br />
3
Q用例图
用例Q?/span>
use case
Q是从用L(fng)观点对系l行为的一个描q?/span>
例,一个h使用一台洗机Q显然是Zz服(
wash clothes
Q?/span>
代表z机用L(fng)智力h形被UCؓ(f)参与者(
actor
Q。椭圆Ş代表用例?/span>
参与者(它是发v用例的实体)可以是一个h也可以是另一个系l?br />
4
Q状态图
一台洗衣机可以处于Q?/span>
soak
Q、洗涤(
Wash
Q、漂z(
Rinse
Q、脱_(d)
Spin
Q或者关机(
off
Q状态?br />
最端的符号代表v始状态,最底端的符可C终止状态?/span>
5
Q顺序图
cd和对象图标大的实pȝ的静态结构。在一个运行的pȝ中,对象之间要发生交互,q且q些交互要经历一定的旉?/span>
UML
序图所表达的正式这U基于时间的动态交互?/span>
例,z机的构g包括一个注水的q水(
Water Pipe
Q、一个用来装物的洗涤Q?/span>
Drum
Q以一个排水管Q?/span>
Drain
Q。假讑ַl完成了“加衣物”、“加z剂”和“开机”操作。洗服q个用例被执行时按照如下序q行Q?/span>
1
通过q水想zᔾ~怸注水?/span>
2
zᔾ~怿?/span>
5
分钟静止状态?/span>
3
水注满,停止注水?/span>
4
zᔾ~往q旋?/span>
15
分钟?/span>
5
通过排水排掉洗涤后的脏水?/span>
6
重新开始注水?/span>
7
zᔾ~l往q旋转洗涤?/span>
8
停止向洗衣机中注水?/span>
9
通过排水排掉漂z物的水?/span>
10
zᔾ~加快速度单方向旋?/span>
5
分钟?/span>
11
zᔾ~停止旋转,zq程l束?/span>
图中Q对象之间发送的消息有:(x)注入新水Q?/span>
Send fresh water
Q、保持静止(
Remain stationary
Q、停止注_(d)
Stop
Q、往q旋转(
Ratate back and forth
Q、排掉洗涤后的脏_(d)
Send soapy water
Q、排掉漂z过的水Q?/span>
Send rinse water
Q等?br />
6
Q活动图 用例和对象的行ؓ(f)中的各个zd之间通常h旉序?/span>
7
Q协作图
pȝ的工作目标是ql中各组成元素相互协作完成的。例子中z机构件的c集中又增加了一个内部计时器Q?/span>
Internal Timer
Q。在l过一D|间后Q定时器停止注水Q然后启动洗涤往q旋转。图中的序号代表命o(h)消息的发送顺序?br />
8
Q构件图
构g囑֒部v囑֒整个计算机系l密切相兟?br />
9
Q部|图
UML
部v图显CZZ计算机系l的物理体系l构。它可以描述计算机和讑֤Q展C它们之间的q接Q以?qing)驻留在每台机器中的软g。每台计机用一个立方体来表C,立方体之间的q线表示q些计算Z间的通信关系?/span>
如果需要将图中的组l元素分l,或者在图中说明一些类或构件是某个特定子系l的一部分Q可以通过这些元素组l成包(
package
Q来辑ֈ此目的。包用一边突L(fng)公文夹Ş图标来表C?br />
注释Q?/span>
note
Q的图标是一个带折角的矩形,矩Ş框中是解释性文字。注释和被注释的囑օ素之间用一条虚U连接?br />
构造型Q?/span>
stereotype
Q能够用现有的
UML
元素来定制新的元素。构造型用尖Ҏ(gu)hh的一个名U来表示Q这个括号叫双尖括号Q?/span>
guillemets
Q?/span>
|