ExtJS实战(10)-项目总结
好啦,整个应用看完了。大家是不是大有斩获呢!?呵呵,我们来做个项目总结吧。
1. Spring的作用是什么?
很多人在做SSH的应用时,很清楚Struts和Hibernate的职责和作用,但是却对Spring的作用有点迷惑。为什么呢?因为我们看到了很多Struts的API和Hibernate的API,但是却没有看到多少Spring的API。那么,大家还记得Spring定义吗?我们说它是一个非侵入式框架,也就是说,虽然看不到它的存在,却处处感觉到它的温暖。正所谓‘润物细无声’,这正是春天的奥义!呵呵,扯远了。想想Spring做了哪些事情吧,Struts框架里面最重要的的组件Action交给它管理,Hibernate里面最重要的组件SessionFactory也交给它管理,Service里面的方法自动置身在声明式事务的管理之中,这些难道还不能说明Spring这个‘黏合剂’的重要地位吗?!其实我们这里还是有点破坏了Spring的非侵入式特点,因为我们在写DAO层的时候继承了一个类:HibernateDaoSupport。而这个类是Spring对Hibernate框架的一个帮助支持类,属于Spring的API。不过也正是因为它的支持,我们DAO层的代码才能那么简洁!
2. 使用SSH的javaEE四层体系架构的传值组件有哪些,可以简化吗?
一切软件开发,最重要的是数据。那么,数据存储靠后台数据库,数据展现靠web页面(jsp,freemarker,velocity,pdf,excel等各种视图的简称!),也就是说,数据永远是在web页面和后台数据库之间传递。那么,数据在传递的时候,一般是打包封装传递,而不会是零散的。这个很好理解,假如你想从北京运输一批军火到上海,当然是用卡车或者飞机装载,而不会傻到一杆枪一杆枪地搬运!(罪过,罪过,怎么举这种例子!)那么,使用SSH组合框架在数据传输过程中的卡车就叫传值组件,分别有ActionForm,DTO,POJO三种。我个人倾向于3种组件都要使用。为什么呢?持怀疑态度的人一般是对各个组件之间属性值的拷贝深恶痛绝。其实这里面是有原因和技巧的。ActionForm的存在是理所当然地,因为它和页面表单数据结合的非常紧密,而且Struts能够自动把页面表单上的数据装载到ActionForm实例中,还能够把放置在request或session区域中的ActionForm实例中的属性直接显示到页面上。这样的功能是我们非常需要的。我们没理由摒弃它。POJO的存在也是理所当然的,因为它和数据库中的表集合的非常紧密,基本上我们都是一个POJO类对应一张数据表,这不正是ORM吗?!对于各种类型的实体关系,譬如一对一,多对一,多对多,单向还有双向的关系,我们都可以用POJO类与类之间的关联来实现。而且,更重要的是,我们都有很智能化的工具,譬如MyEclipse来直接反转表来生成。没有比这个更让人兴奋了。POJO类压根就不需要我们动手写!那么,DTO呢?有了POJO,它还有存在的必要吗?我觉得必要是大大的。首先,POJO是持久化类,有不同的状态。再其次,在一个复杂的应用中,它里面会有譬如日期,图片,金额这样的复杂数据类型,还会有不同类之间复杂的依赖关系(一个类,或者类的集合做另一个类的属性是常有的)。所以,它是不适合直接传递到页面上做显示的。又由于ActionForm是Struts特有的组件,不便于移植。所以在ActionForm和POJO之间找一个桥梁-DTO是非常必要的。那么,可能有人会说:ActionForm和DTO之间数据的转换还是很麻烦啊?大家想想,如果我们将DTO作为ActionForm的属性呢?这样是不是变得非常方便?!
3. DTO的设计要遵循什么样的原则?
(1) 尽可能使用比较简单的数据类型,比如JAVA的基本数据类型,还是String类型。
(2) 和POJO保持极大程序的相似,便于用工具类来拷贝。但要注意类型不同的属性名称不能相同。
(3) 要兼顾页面显示和数据库存储,设计要相对宽松。
4. 为什么使用ExtJS?
用最少的代码做出做炫的效果,这大概是extjs最吸引人的地方。基于对象、组件,便开发更轻松,调试更方便。为开发者屏蔽了浏览器间的差异(呵呵,这个是所有JS框架都提供的)。很酷的如例子Desktop、Portal、Organizer。Tree、TabPanel这样常用的东西,就直接封装成组件,并外挂很多事件函数。Ajax使用起来非常方便,直接request相应URL,参数以JSON传递。返回的也是JSON,{success:true}或{failure:true},就可以执行success或failure时设定的任务。还可以很方便地继承扩展类,制作更适合自己的类。extent函数就是专用的。和其它的编程语言一样,extjs可以添加成员,添加函数,添加事件。所有的这些,也都是JSON的格式。Organizer例子中,扩展出一个新的组件:ImageDragZone。这个组件可以直接在其他程序中复用。
ExtJS实战(10)-项目总结相关推荐
- 【机器学习项目实战10例目录】项目详解 + 数据集 + 完整源码
前言 大家好,我是阿光. 本专栏整理了<机器学习项目实战10例>,内包含了各种不同的入门级机器学习项目,包含项目原理以及源码,每一个项目实例都附带有完整的代码+数据集. 正在更新中~ ✨
- 【敬初学者】Python基础学完了,该怎么知道自己学的怎么样呢?十个经典实战小项目附源码
前言 1.街霸游戏 1.1 KO街霸 程序完整源码 程序的输出界面 1.2 春丽VS巴洛克 参考源码 2.猜谜游戏 2.1简单的猜数字游戏 项目要求 参考源码 2.2 进阶的猜姓名游戏 项目要求 参考 ...
- 我用Python把抖音上的美女图片转字符画,期望的AI目标更进一步【机器学习算法实战小项目,k聚类算法图片转化字符画】
大家好,我是辣条. 最近在学习算法,今天给大家带来一个机器学习实战小项目 项目效果展示 学习目标 1.cv2转换图片数据 2.numpy提取图片矩阵数据 3.k均值算法获取图片的分类 工具使用 开 ...
- 暗月渗透实战靶场-项目六(上)
暗月渗透实战靶场-项目六 环境搭建 使用的是暗月提供的环境 直接虚拟机运行即可 设置网络环境 网卡配置的时候为了方便直接使用的是暗月的vm19的网卡配置的内网环境 00x1-信息搜集 我们已经知道目标 ...
- ThinkPad物理机安装Linux系统实战企业级项目之CentOS安装
ThinkPad物理机安装Linux系统实战企业级项目之CentOS安装 系统安装 下载CentOS系统制作系统U盘 笔记本电源设置 网络设置 WiFi类型查看验证设置联网 设置固定IP 安装MySQ ...
- laravel实战化项目之三板斧
2019独角兽企业重金招聘Python工程师标准>>> laravel实战化项目之三板斧 spring mvc 实战化项目之三板斧 asp.net mvc 实战化项目之三板斧 lar ...
- 大数据实战-callLog项目(通话记录数据分析)之数据生产
文章目录 前言 生成基础数据 Maven依赖 姓名-手机号列表 时间维度表 自动随机生成 生成时间戳 生成一定范围内的long数据 代码 调用演示 获得随机的时间戳 代码 调用示例 生成一行记录 打包 ...
- libhv tcp实战小项目
libhv Tcp小项目实战 一.概述 1.包头 2.心跳 3.任务队列 二.包头 2字节 2字节 4字节 4字节 2字节 1字节 1字节 起始标志 版本号(N) Command(命令ID) 消息体长 ...
- Vue快速入门(附实战小项目:记事本、天气预报、音乐播放器)
文章目录 一.前言 二.Vue.js安装 三.初始化Vue项目 四.项目目录解析 五.Vue核心指令 1.插值表达式 2.v-text 3.v-html 4.v-on 5.计数器实战 6.v-show ...
最新文章
- Zabbix安装(十):监控windows进程
- python中列表的运用_python中列表的应用
- java class is frozen_利用javassit简单操作class文件 1
- Java常用的5大框架介绍!
- Jmeter笔记(5)线程组执行顺序
- javascript之 原生document.querySelector和querySelectorAll方法
- linux中时间命令详解
- OpenGL绘制旋转茶壶
- Docker架构、常用命令和示例
- 2018-2019-2 20165312《网络攻防技术》Exp7 网络欺诈防范
- CMakeFiles/species.inc.dir/build.make:57: recipe for target 'CMakeFiles/species.inc' failed
- 计算机c盘删除的文件怎么找回,C盘空间不足怎么办 删除C盘文件教程【详解】...
- 一个程序员的书法学习之路-法帖篇
- Python人脸笑脸识别【人工智能】【CNN】
- MySql 配置 方法
- 数据蛙恢复软件替代产品有哪些?15款顶尖数据恢复软件清单
- 投资理念研究分析报告
- 纳什均衡(Nash equilibrium)
- WebSocket和SocketIO总结
- java 圆周率_Java 计算圆周率