第07章 深入视图层
- 格式:doc
- 大小:185.50 KB
- 文档页数:28
软件工程(本)作业1 Array(第1~4章)一、选择题:1.开发软件所需高成本和产品的低质量之间有着尖锐的矛盾,这种现象称做(C)。
A.软件工程B.软件周期C.软件危机D.软件产生2.瀑布模型本质上是一种(A )模型。
A.线性顺序B.顺序迭代C.线性迭代D.早期产品3.瀑布模型存在的问题是(B )。
A.用户容易参与开发 B.缺乏灵活性C.用户与开发者易沟通 D.适用可变需求4.螺旋模型是一种将瀑布模型和(A)结合起来的软件开发模型。
A.增量模型B.专家系统C.喷泉模型D.变换模型5.原型化方法是用户和设计者之间执行的一种交互构成,适用于(A)系统。
A.需求不确定性高的 B.需求确定的C.管理信息 D.实时6.下列有关软件工程的标准,属于国际标准的是(D )A.GBB.DINC.ISOD.IEEE7.结构化方法是一种基于(D)的方法。
A.数据结构B.程序结构C.算法D.数据流8.软件可行性研究实质上是要进行一次( A)需求分析、设计过程。
A、简化、压缩的B、详细的C、彻底的D、深入的9.可行性研究的目的是(D)A、分析开发系统的必要性B、确定系统建设的方案C、分析系统风险D、确定是否值得开发系统10.设年利率为i,现存入p元,不计复利,n年后可得钱数为(C)。
A、P×(1+i*n)B、P× (i+1)*nC、p×(1+i)nD、p×(i+n)11.可行性研究是在(A)之前A、系统开发B、测试C、试运行D、集成测试12.可行性研究需要的时间长短取决于系统的规模,一般来说,可行性研究的成本只是预期总成本的(C)。
A、1%B、20%C、8%D、50%13.我国正式颁布实施的(B)对计算机病毒的定义具有法律性、权威性。
A.《计算机软件保护条例》B.《中华人民共和国计算机信息系统安全保护条例》C.《中华人民共和国著作权法》D.《计算机病毒防治管理办法》14.效率是一个性能要求,因此应当在(B)阶段规定?A、可行性分析B、需求分析C、概要设计D、详细设计15.需求规格说明书的作用不包括(D)A、软件验收的依据B、用户与开发人员对软件要做什么的共同理解C、软件可行性研究的依据D、软件设计的依据16.数据字典是用来定义(D)中的各个成份的具体含义的。
Dorado 5 快速入门富浏览器展现中间件快速创建Rich Internet Application的表现层解决方案1.前言 (4)2.简介 (5)3.STUDIO (6)3.1.使用说明 (6)3.2.工程管理 (17)3.2.1.工程管理 (17)3.2.2.系统菜单 (17)4.一个简单的DORADO应用界面 (17)4.1.视图模型简介 (17)4.2.创建DORADO应用 (20)4.2.1.新建工程 (20)4.2.2.数据连接配置 (22)4.2.3.制作dorado JSP (23)5.常用组件应用技巧 (32)5.1.自由表单(A UTO F ORM) (32)5.2.数据表格(D A TA T ABLE) (36)5.3.菜单(M ENU) (53)5.4.树(T REE) (53)5.5.下拉框(D ROP D OWN) (53)5.6.命令(C OMMAND) (53)6.视图模型 (53)6.1.视图模型的状态 (53)6.2.视图模型实现类 (55)6.3.视图模型的上下文(D ORADO C ONTEXT) (56)6.4.视图模型中的JDBC开发 (58)6.4.1.事务管理 (59)6.4.2.异常处理 (60)7.业务逻辑框架整合范例 (61)7.1.S QL D ATASET (61)7.1.1.预定义Sql编程 (62)7.1.2.实现预定义Sql编程的动态性: (63)7.1.3.运行时Sql编程 (64)7.2.存储过程 (65)7.3.J A V A 实体对象 (66)7.3.1.记录集的监听器内部实现 (66)7.3.2.系统的业务对象实现 (67)7.3.3.通过引入第三方框架管理与组织自己业务对象的基础之上实现(如加入Spring,Hibernate) (69)8.数据坞 (71)8.1.数据模块中的D A TASET (71)9.典型界面开发 (83)10.权限管理和PROFILE (83)10.1.P ROFILE使用说明 (83)10.2.P ROFILE文件的定义 (87)10.3.视图模型(V IEW M ODEL)PROFILE的指定 (87)11.文件或BLOB字段的处理 (88)12.发布 (88)12.1.基本原理 (88)12.2.发布方法 (90)12.2.1.dorado studio打包: (90)12.2.2.其他工具打包: (91)13.升级 (91)14.附录 (93)14.1.参考程序光盘说明 (93)14.2.数据库配置说明 (93)1.前言dorado是由BSTEK公司推出的面向J2EE 的新一代Web应用的开发框架,支持AJAX 机制。
OSI七层模型与各层设备对应之杨若古兰创作OSI七层收集模型由下至上为1至7层,分别为物理层(Physical layer),数据链路层(Data link layer),收集层(Network layer),传输层(Transport layer),会话层(Session layer),暗示层(Presentation layer),利用层(Application layer).利用层,很简单,就是利用程序.这一层负责确定通信对象,并确保由足够的资本用于通信,这些当然都是想要通信的利用程序干的事情.为操纵零碎或收集利用程序提供访问收集服务的接口.利用层和谈的代表包含:Telnet、FTP、HTTP、SNMP等.暗示层,负责数据的编码、转化,确保利用层的正常工作.这一层,是将我们看到的界面与二进制间互相转化的地方,就是我们的说话与机器说话间的转化.数据的紧缩、解压,加密、解密都发生在这一层.这一层根据分歧的利用目的将数据处理为分歧的格式,表示出来就是我们看到的各种各样的文件扩展名.会话层,负责建立、保护、控制会话,区分分歧的会话,和提供单工(Simplex)、半双工(Half duplex)、全双工(Full duplex)三种通信模式的服务.我们平时所知的NFS,RPC,X Windows等都工作在这一层.管理主机之间的会话进程,即负责建立、管理、终止进程之间的会话.会话层还利用在数据中拔出校验点来实现数据的同步.传输层,负责分割、组合数据,实现端到端的逻辑连接.数据在上三层是全体的,到了这一层开始被分割,这一层分割后的数据被称为段(Segment).三次握手(Threeway handshake),面向连接(ConnectionOriented)或非面向连接(ConnectionlessOriented)的服务,流控(Flow control)等都发生在这一层.是第一个端到端,即主机到主机的条理.传输层负责将上层数据分段并提供端到端的、可靠的或不成靠的传输.此外,传输层还要处理端到端的错误控制和流量控制成绩.在这一层,数据的单位称为数据段(segment).传输层和谈的代表包含:TCP、UDP、SPX等收集层,负责管理收集地址,定位设备,决定路由.我们所熟知的IP地址和路由器就是工作在这一层.上层的数据段在这一层被分割,封装后叫做包(Packet),包有两种,一种叫做用户数据包(Data packets),是上层传上去的用户数据;另一种叫路由更新包(Route update packets),是直接由路由器发出来的,用来和其他路由器进行路由信息的交换.负责对子网间的数据包进行路由选择.收集层还可以实现堵塞控制、网际互连等功能.在这一层,数据的单位称为数据包(packet).收集层和谈的代表包含:IP、IPX、RIP、OSPF等数据链路层,负责筹办物理传输,CRC校验,错误通知,收集拓扑,流控等.我们所熟知的MAC地址和交换机都工作在这一层.上层传上去的包在这一层被分割封装后叫做帧(Frame).在不成靠的物理介质上提供可靠的传输.该层的感化包含:物理地址寻址、数据的成帧、流量控制、数据的检错、重发等.在这一层,数据的单位称为帧(frame).数据链路层和谈的代表包含:SDLC、HDLC、PPP、STP、帧中继等物理层,就是实实在在的物理链路,负责将数据以比特流的方式发送、接收,就不多说了.具体说:网线,集线器----物理层网卡,网桥----数据链路路由器-----收集层交换机就是用来进行报文交换的机器.它和HUB最次要的区别就HUB是物理层设备,采取广播的方式来传输信息,交换机多为链路层设备(二层交换机),能够进行地址进修,采取存储转发的方式来交换报文.它和路由器的区别在于路由器有DDN,ADSL等接口,交换机只要以太网接口.国际尺度组织(ISO)拟定了OSI模型.这个模型把收集通信的工作分为7层.1至4层被认为是低层,这些层与数据挪动密切相干.5至7层是高层,包含利用程序级的数据.每一层负责一项具体的工作,然后把数据传送到下一层.物理层(也即OSI模型中的第一层)在课堂上经常是被忽略的.它看起来似乎很简单.但是,这一层的某些方面有时须要特别留意.物理层实际上就是布线、光纤、网卡和其它用来把两台收集通信设备连接在一路的东西.甚至一个信鸽也能够被认为是一个1层设备(拜见RFC 1149).收集故障的排除经常涉及到1层成绩.我们不克不及健忘用五类线在全部一层楼进行连接的传奇故事.因为办公室的椅子经常从电缆线上压过,导致收集连接出现断断续续的情况.遗憾的是,这类故障是很罕见的,而且排除这类故障须要耗费很长时间.第2层是以太网等和谈.请记住,我们要使这个成绩简单一些.第2层中最次要的是你应当理解网桥是什么.交换机可以看成网桥,人们此刻都如许称呼它.网桥都在2层工作,仅关注以太网上的MAC地址.如果你在谈论有关MAC地址、交换机或者网卡和驱动程序,你就是在第2层的范畴.集线器属于第1层的领域,因为它们只是电子设备,没有2层的常识.第2层的相干成绩在本收集讲座中有本人的一部分,是以此刻先不具体讨论这个成绩的细节.此刻只须要晓得第2层把数据帧转换成二进制位供1层处理就可以了.在往下讲之间,你应当回过头来从头浏览一下上面的内容,因为经验缺乏的收集管理员经常混淆2层和3层的区别.如果你在谈论一个IP地址,那么你是在处理第3层的成绩,这是“数据包”成绩,而不是第2层的“帧”.IP是第3层成绩的一部分,此外还有一些路由和谈和地址解析和谈(ARP).有关路由的一切事情都在第3层处理.地址解析和路由是3层的次要目的.第4层是处理信息的传输层.第4层的数据单元也称作数据包(packets).但是,当你谈论TCP等具体的和谈时又有特殊的叫法,TCP的数据单元称为段(segments)而UDP和谈的数据单元称为“数据报(datagrams)”.这个层负责获取全部信息,是以,它必须跟踪数据单元碎片、乱序到达的数据包和其它在传输过程中可能发生的风险.理解第4层的另一种方法是,第4层提供端对端的通信管理.像TCP等一些和谈非常善于包管通信的可靠性.有些和谈其实不在意一些数据包是否丢失,UDP和谈就是一个次要例子.此刻快要到7层了,我们很想晓得第5层和第6层有些什么功能.可以说,它们都是没有效的.有一些利用程序和和谈在5层和6层.但是,对于理解收集成绩来说,谈论这些成绩没有任何好处.请大家留意,第7层是“一切”.7层也称作“利用层”,是专门用于利用程序的.如果你的程序须要一种具体格式的数据,你可以发明一些你但愿能够把数据发送到目的地的格式,而且创建一个第7层和谈.SMTP、DNS和FTP都是7层和谈.进修OSI模型中最次要的事情是它实际代表什么意思.假如你是一个收集上的操纵零碎.在1层和2层工作的网卡将通知你什么时候无数据到达.驱动程序处理2层帧的出口,通过它你可以得到一个发亮和闪光的3层数据包(但愿是如此).作为操纵零碎,你将调用一些经常使用的利用程序处理3层数据.如果这个数据是从上面发上来的,你晓得那是发给你的数据包,或者那是一个广播数据包(除非你同时也是一个路由器,不过,临时不必担心这个成绩).如果你决定保存这个数据包,你将打开它,而且取出4层数据包.如果它是TCP和谈,这个TCP子零碎将被调用并打开这个数据包,然后把这个7层数据发送给在目标端口等待的利用程序.这个过程就结束了.当要对收集上的其它计算机做出回应的时候,每一件事情都以相反的顺序发生.7层利用程序将把数据发送给TCP和谈的履行者.然后,TCP和谈在这些数据中加入额外的文件头.在这个方向上,数据每前进一步体积都要大一些.TCP和谈在IP和谈中加入一个合法的TCP字段.然后,IP和谈把这个数据包交给以太网.以太网再把这个数据作为一个以太网帧发送给驱动程序.然后,这个数据通过了这个收集.这条线路中的路由器将部分地分解这个数据包以获得3层文件头,以便确定这个数据包应当发送到哪里.如果这个数据包的目的地是当地以太网子网,这个操纵零碎将代替路由器为计算机进行地址解析,而且把数据直接发送给主机.。
《视图》讲义一、什么是视图在我们探讨视图这个概念之前,让我们先从一个简单的生活场景来理解它。
想象一下你站在一个房间的门口,通过门口这个有限的视角,你看到房间里的一部分景象,比如一张桌子、一把椅子和一个窗户。
这个你通过门口所看到的有限景象,就类似于我们在计算机技术中所说的“视图”。
那么,在计算机领域中,视图到底是什么呢?简单来说,视图是数据库中的一个虚拟表。
它并不是真正存储数据的地方,而是基于一个或多个表的数据,通过一定的规则和条件筛选、组合和呈现出来的一种数据展示方式。
打个比方,如果数据库中的表是一个装满各种物品的仓库,那么视图就是从这个仓库中挑选出特定物品,并按照一定的方式摆放好展示给我们看的一个橱窗。
二、视图的作用1、数据安全性视图可以帮助我们控制用户能够看到的数据。
通过创建只包含特定列或特定行的视图,我们可以防止用户访问敏感或不必要的数据。
比如说,在一个包含员工信息的数据库中,我们可以创建一个视图,只显示员工的姓名、部门和职位,而隐藏员工的工资、联系方式等敏感信息。
2、简化数据操作对于复杂的数据库结构,视图可以将复杂的查询和连接操作封装起来,为用户提供一个更简单、直观的数据视图。
用户无需了解底层数据库表之间的复杂关系,只需要对视图进行操作,就能够获取所需的数据。
3、逻辑数据独立性当数据库的结构发生变化时,如果我们使用了视图,只要视图的定义不变,用户对视图的操作就不会受到影响。
这就使得数据库的修改对用户来说是透明的,增强了系统的可维护性和稳定性。
三、视图的创建在大多数关系型数据库管理系统中,创建视图通常使用 CREATE VIEW 语句。
以下是一个创建视图的简单示例:假设我们有一个名为“students”的表,其中包含“id”、“name”、“age”和“grade”等列。
现在我们想要创建一个视图,只显示年龄大于 18 岁的学生的信息。
```sqlCREATE VIEW adult_students ASSELECT FROM students WHERE age > 18;```通过上述语句,我们就成功创建了一个名为“adult_students”的视图。
第 7 章深入视图层视图(view)的作用是显示特定动作(action)的输出。
在symfony里,视图由几部分组成,这些部分都很容易修改。
∙Web设计师通常会与模板(当前动作的数据的表现形式)和布局(包含所有页面都会用到的代码)打交道。
这些模板由HTML加上PHP代码片段(主要是辅助函数调用)组成。
∙为了重用,开发者往往会把模板代码的片段放在局部模板(Partials)或者组件(Components)里。
开发者使用槽(Slots)与组件(Components)来影响布局的多个区域。
web设计师也可以修改这些模板片段。
∙开发者专注于YAML视图配置文件(用来设置回应与其他界面元素的属性)还有回应对象(response object)。
处理模板里的变量的时候,跨站脚本(corss-site scripting)的风险不可忽略,这就需要在记录用户数据的时候很好的理解输出转义(output escaping)技术。
不论你是哪一个角色,你都可以发现能加快输出动作结果这件乏味的工作的工具。
这一章将会介绍这些工具。
模板例 7-1 是一个典型的symfony模板。
它包含一些HTML代码和一些基本的PHP 代码,通常是显示动作(action)里定义的(通过$this->name = 'foo';)变量还有辅助函数。
例 7-1 - indexSuccess.php 模板样本<h1>欢迎</h1><p>欢迎回来 <?php echo $name ?>!</p><ul>您要做什么?<li><?php echo link_to('阅读最新的文章', 'article/read') ?></li> <li><?php echo link_to('写一篇新文章', 'article/write') ?></li></ul>在第4章里介绍过,这种另类的PHP语法对非PHP开发者来说也很容易理解因此很适合于用在模板里。
请注意在模板里面尽量减少PHP代码量,由于这些文件用来设计程序的界面,这些模板有些时候是由其他的团队维护的,例如表现团队而不是应用程序逻辑团队。
把逻辑放在动作(action)里还可以使一个动作对应多个模板更容易,减少代码重复。
辅助函数(Helpers)辅助函数是返回模板里使用的HTML代码的PHP函数。
在例 7-1 里,link_to() 函数就是一个辅助函数。
有时,辅助函数只是用来节约时间,把模板里常用的代码封装起来。
例如,你很容易想得到下面这个辅助函数的定义:<?php echo input_tag('nickname') ?>=> <input type="text" name="nickname" id="nickname" value="" />它应该与例 7-2 中的差不多。
例 7-2 - 辅助函数定义的例子function input_tag($name, $value = null){return '<input type="text" name="'.$name.'"id="'.$name.'"value="'.$value.'" />';}事实上,symfony内建的input_tag()函数比这个要复杂一点,它有第三个参数,这个参数用来指定<input>标签的属性。
你可以去在线API文档查看这个函数详细的语法与参数。
(/api/symfony.html)。
大多数时候,辅助函数更聪明并且节省大量写代码的时间:<?php echo auto_link_text('请访问我们的网站 ') ?>=> 请访问我们的网站 <ahref=""></a>辅助函数能加快写模板的速度,同时辅助函数生成的HTML兼具性能与可访问性。
当然,你还是可以写普通HTML代码,不过辅助函数写起来总是要快一些。
TIP你可能会问为什么辅助函数的命名用下划线而不是symfony里随处可见的大小写字母规则。
这是因为辅助函数是函数,所有的PHP核心函数都用下划线命名规则。
声明辅助函数包含辅助函数定义的symfony文件不能被自动载入(因为它们是函数而不是类)。
辅助函数按照目的分组。
例如,所有处理文字的辅助函数都在一个名叫TextHelper.php的文件里定义,称作Text辅助函数组。
所以如果你要在模板里使用一个辅助函数,你必须在使用之前通过user_helper()函数声明载入这个辅助函数相关的辅助函数组。
例 7-3 里的这个模板使用了 auto_link_text() 辅助函数, 它属于Text 辅助函数组。
例 7-3 - 声名使用一个辅助函数// 在这个模板里使用一个特定的辅助函数<?php echo use_helper('Text') ?>...<h1>描述</h1><p><?php echo auto_link_text($description) ?></p>TIP如果你要声明多个辅助函数组,给use_helper()函数传多个参数就可以了。
例如,要在一个模板里载入Text和Javascript辅助函数组,可以使用 <?php echo use_helper('Text', 'Javascript') ?> 来声明。
有一些辅助函数在所有的模板里都可以使用,不需要事先声明。
它们是以下的辅助函数组:∙Helper:用来载入辅助函数(use_helper() 函数本身就是一个辅助函数) ∙Tag:基本的标签辅助函数,几乎所有的辅助函数都用到它∙Url:链接与URL管理辅助函数∙Asset:用来生成HTML<head>部分的内容,还包括简化使用外部资源(图片,Javascript,样式表)的函数∙Partial:用来调用局部模板的辅助函数∙Cache:管理代码片段的缓存∙Form:表单辅助函数这里列出的标准辅助函数,在每个模板中都会被自动载入,可以在settings.yml 文件里面设置。
所以如果你确定你不会用到Cache辅助函数组的辅助函数,或者你每次都需要用到Text组,你可以修改 standard_helper这个设置。
这会稍稍加快你的程序。
但是你不能删除这个列表里的前四个辅助函数组 (Helper、Tag、Url和 Asset),因为模板引擎需要它们才能正常工作。
所以在标准辅助函数设置(standard_helper)里找不到这四个辅助函数组。
TIP如果你需要在模板之外使用辅助函数,你也可以通过sfLoader::loadHelper($helpers)来载入一个辅助函数组,$helpers可以是辅助函数组的名字或几个辅助函数组名字组成的数组。
例如,如果你想在一个动作(action)里使用auto_link_text(),你需要首先执行sfLoader::loadHelper('Text')。
常用辅助函数在本节里你会了解一些后面要用到的辅助函数的详情。
例 7-4 给出了一个常用辅助函数列表,还有它们输出的HTML代码。
例 7-4 - 常用的默认辅助函数// Helper 组<?php echo use_helper('HelperName') ?><?php echo use_helper('HelperName1', 'HelperName2', 'HelperName3') ?>// Tag 组<?php echo tag('input', array('name' => 'foo', 'type' => 'text')) ?> <?php echo tag('input', 'name=foo type=text') ?> // 另一种选项格式=> <input name="foo" type="text" /><?php echo content_tag('textarea', 'dummy content', 'name=foo') ?>=> <textarea name="foo">dummy content</textarea>// Url 组<?php echo link_to('点我', 'mymodule/myaction') ?>=> <a href="/route/to/myaction">点我</a> // 取决于路由(routing)设置// Asset 组<?php echo image_tag('myimage', 'alt=foo size=200x100') ?>=> <img src="/images/myimage.png" alt="foo" width="200" height="100"/> <?php echo javascript_include_tag('myscript') ?>=> <script language="JavaScript" type="text/javascript"src="/js/myscript.js"></script><?php echo stylesheet_tag('style') ?>=> <link href="/stylesheets/style.css" media="screen"rel="stylesheet"type="text/css" />symfony里还有很多其他的辅助函数,如果要讲完它们需要一整本书。