??xml version="1.0" encoding="utf-8" standalone="yes"?>
表示?--> 业务?--> 持久?/span>
q表明了层与层之间的调用关系Q表C层通过调用业务层来完成dQ而业务层则调用持久层。从另一个角度来看,一U依赖关pL
表示?--> 领域模型(Domain Model) <-- 持久?/span>
?strong>表示层和持久层都应该理解(recognize)领域模型。而领域模型则是业务层的一部分。业务层正是pȝ的h值所在。虽说表C和持久也很重要Q在某些pȝ中可以说是很关键Q但?strong>它们的最l目的都是ؓ业务服务Q所以业务层应该是系l的核心?br />
Z以上的认识,在系l设计的时应首先分析需求得到领域模型,扑ևpȝ中的实体、对象(静态的一面)Qƈ明确大致的业务流E?动态的一??而另两层应尽最大努力ؓ业务层服务,且尽量减业务层受另两层的限制?br />
各层的职责:
表示层:负责昄信息Q及从系l外部得到输入。表C层的设计决定系l界面的可用性,及信息输入和展示的可靠性。表C层只知道如何展CZ息,及收集用戯入,q不知道该如何对q些输入q行处理来完成业务?br />
业务层:完成业务逻辑。业务层设计军_客户价值是否能够得到实现。这是系l的关键。外在的表现是功能性。业务层设计和实现的p表现在用L卛_能缺失,功能不可靠等。如果需要对业务层的业务规则q行解耦,则可以用规则引擎如DroolsQ把业务规则分离出来。但分离后的业务规则仍属于业务层。业务层知道如何对用戯入进行处理,能够应用业务规则完成用户所需的业务,但它不知道数据如何读取和保存?br />
持久层:负责用户信息的持久化。持久层的失误表现在外即数据处理(储存Q展C等)不可靠。持久层完全不知道业务,只专注于数据存储和读取。所谓持久化q不一定是指数据库QQ何方式的持久?通过文gQ网l的持久化等)都应由持久层完成?br />
各层的设计都会直接媄响系l性能?br />
三层的体U大和复杂度在不同的系l中可能会有很大的不同。比如说GOOGLE的搜索引擎,它的界面很简单,可以惛_表示层是比较Ҏ实现的,而它的业务层Q关pd处理关键字,分析搜烦l果Q决定排名等Q而持久层则要负责处理大量的数据。业务层和持久层则相当复杂。而有的系l持久层会很,比如杀毒YӞ媒体播放软g{。业务层而另两层大的例子暂时q没有想?)
]]>
比如输入help(’print’)Q它׃L?#8217;print’为名的模块,c,{,找不到就会看到提CZ息。而print在python里是一个保留字Q和pass,return同等Q而非对象Q所以help(print)也会出错((kkkkkkk))?/span>
举个例子Q?br>
2 a = [1,2,3]
3 help(a) #会显Clist的帮?/span>
4 help(a.append) #会显Clist的appendҎ的帮?/span>
python安装自带的library referenceQ?.1节是关于内置函数的?/p>
Reference Manual?.6节可以找到关于print的东东?/span>
Java/Struts/JSP | Python/Django | |
开发步?/td> | 1.在web.xml里配|struts的servlet 2.在struts-config.xml里配|URL和action的映?br>3.写action 4.写JSP |
1.在urls.py里配|URL到方法的映射 2.写相应的Ҏ 3.写HTML模板 |
调用q程 | 1.Ҏweb.xml的映调用struts的servlet controller 2.servlet controllerҎstruts-config.xml的映调用相应的action 3.action处理h 4.JSP渲染昄 |
1.Ҏurls.py的映调用相应的Ҏ 2.Ҏ处理h 3.HTML渲染昄 |
DOM只是一个定义,q不是具体的实现Q它的目的就是ؓ了让大家在各个^C都能用相同的方式来处理XMLQ这样一来,我只要了解DOMQ基本上在各个^C都可以方便的处理XMLQ而不用重新学习了。比如说QJava, JavaScript, Python都有DOM的实玎ͼ用它们来处理XMLQ方式基本上都是一LQ当然也有非DOM的XML解析方式Q。在Java下,实现DOM的类库就有很多,比如JDom,XercesQ?用GOOGLE一搜就一大把。现在Java 5.0内置的就是Xerces。而JavaScript本n内|了DOM的实现。Python也默认安装了DOM的库?/p>
正因为DOM致力于实现各个^C对XML一致的处理方式Q它定义了一堆自q接口。因此在用DOM的时候,会有很多非NATIVE的东东。比如说Q返回节点的子节点的ҎQchildNodesQ返回的cd是NodeList。我W一ơ在Java上用Q就以ؓ是返回一个ListQ然后用get(n)Ҏ来取得某元素。而实际上NodeList是用item(n)的方法来取得某元素的。这p我觉得很怪。而DOM正是用这U方式来获得“语a无关”的能力的?/p>
DOM是用IDL(Interface Definition Language)来定义的。完整的定义可以在这里找?http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/core.html。IDL也很Ҏ看懂。定义的1.1节列Z所有的接口?/p>
q些接口里,最重要而且常用的是Node,NodeList,Document,Element,Text,Attrq几个。DOM把XML文档看作一|Q树上的每个元素都是Node。每个Node都属于某个类型,比如Element,attribute,text{。这些类型就表明q个节点在XML文档里的cd了?/p>
比如Node里有个属性:
Ҏq个定义Q对于取得的节点Q我们就可以通过dnodeTypeq个属性来判断q个节点的类型。在Java里,所有的属性都是用getter来取得的Q因此对某节点nQ就可以用n.getNodeType()取得它的cd。Node接口里也定义了类型常量:
用这些常量和和n.getNodeType()的结果比较,可以知道它是不是某U类型?/p>
Node接口中也定义了一些方法,比如Q?/p>
表明appendChildҎ需要一个Nodecd的参敎ͼq回一个Node?具体的说明可以点文档上的链接q去Q也很容易看懂?/p>
Node接口里定义了操纵节点的方法,比如增加子节点,q回父节点,插入新节点,q回节点cdQ等{。Document,Element{接口都l承Node接口Q因此在它们上面都可以用操U节点的Ҏ?/p>
Document:代表整个XML文档。所有DOM元素都不能用cMJava里new的方式来生成Q而是要通过调用Document里的相应Ҏ来生成。因此它提供了生成诸如Element, Attr, Text的方法。比如createElement, createTextNode, createComment{。它也提供了名ؓgetElementsByTagName的方法,用来通过标签名称来取得其对象。比如getElementByTagName("ul")可以获得所有ul标签。它也提供一些文档的属性,比如xmlEncoding,inputEncoding{。它的一个属?documentElement代表文档的根节点。所有对XML元素的操作,基本上都是从Document开始的?/p>
Element:代表一个XML标签。它可以有属性,子标{,{。比?lt;ul id="booklist"><li>hello</li></ul>。标{ul是一个Element,它有一个属性叫idQ属性的值是booklist。它有一个子l点li。li也是一个标{,它也有个子节点helloQ是一个Textcd的节炏V这个接口提供操U其标签属性的ҎQ比如getAttribute,setAttribute,removeAttribute{。它也提供了和Document中一LgetElementsByTagName的方法,用来获得在这个节点下的元素?/p>
Attr:代表标签中的属性。比如上面的id。它也是一个Node。它有名字,|也可以获得它的所属标{?/p>
Text:代表一D|字,比如上面的helloQ它也一个NodeQ但比较ҎQ它不是直接l承NodeQ而是l承CharacterData接口Q后者承了Node。但是它不能有子节点?/p>
用JavaScriptl一个例子。假设有一个HTML文档Q?/p>
下面是增加一个li的JavaScriptҎQ?/p>
用Java来写Q是q样Q?/p>
可以看到处理方式和数据类型都是一L。如果要了解更多Q可以看看DOM的定义,都是IDL?/p>
Ubuntu/Debian中的update-alternative用来对系l中不同版本的同个Y件进行管理?br /> 比如Q系l中可能装有GNU的Java~译器,和SUN的Java~译器。可以用update-alternatives来设|当前用它们中的哪一个?/p>
它的原理是在/usr/bin中徏立一个linkQ指?etc/alternatives中的一个文Ӟ而些文g又是一个linkQ指向当前用的命o。比如java命oQ查看如下:
参数--display可以某个软g的当前配|,如:
status有auto和manual两种。一旦用h改了pȝ的默认设|,它就变ؓmanual。在auto的状态下Q系l会Ҏ几套配置的priority来判断当前应该用哪套配|?/p>
每套配置可以讑֮多个linkQ它们被UCؓslave。上面的例子中,有两套java的配|。一套是/usr/lib/kafe/bin/javaQ另一套是/usr/lib/j2re1.5-sun/bin/javaQ它们各有一个slave。在些例中这些slave讄的是java命o?manual。当更改了配|时Q用man命o查看的帮助也会相应更攏V?/p>
参数--config可以用来更改当前的配|?/p>
参数--install用来讄一套新的配|。具体参?http://blog.stevenkroon.com/2006/08/29/debian-update-alternatives/