Struts2技术内幕 读书笔记二 web开发的基本模式
最佳实践
在讨论基本模式之前,我们先说说一个词:最佳实践
任何程序的编写都得遵循一个特定的规范。这种规范有约定俗称的例如:包名全小写,类名每个单词第一个字母大写等等等等;另外还有一些需要我们严格遵守的:例如我们写自己的servlet的时候就得继承javax.servlet.http.HttpServlet接口。
在标准之上的是对不同标准的具体实现。例如同是servlet标准,tomcat有一套实现方式,Websphere又有不同的实现方式。
在程序员级别来说,面对复杂的业务流程,不同的程序员会有不同的实现方式。这就是程序的差异性,我们不否则差异性有点时候能提升效率,但是这种差异在更多的时候带来的是维护的难度的增加。尽管业务是不同的,具体的底层代码实现也肯定是不同的,但是出于对可维护性和可读性的要求,我们还是希望系统从代码之上的架构层次(宏观层面)看上去是一致的。这个目标我们就称之为最佳实践。
总而言之:最佳实践,就是无数程序员经过无数次的探索,尝试后,总结出来的处理特定问题的一套特定方法。如果我们把每个程序员的自由发挥作为通往成功的一条道路,那么先辈们已经总结出来的最佳实践,就是其中最短的捷径。
但是我们还是得说:尽管程序界已经有了很多的最佳实践,例如spring,hibernate,但是我们的系统又是各不相同的,我们绝对不能生搬硬套,能打开真理的锁的钥匙永远都是那把最合适的。
程序的设计是一门艺术,我们面对的大部分问题都没有一个绝对的最好的优于一切的方法。最多的情况都是这样,这种方案也好,那种方案也不错,此时我们就需要找一个"最合适的"。
目前我们能用到的几个最佳实践就包括:
始终保持程序的可读性,可扩展性,可维护性;
简单是美
尽量使用面向对象的思想
减少依赖
分层开发模式
我们谈的web开发的基本模式其实就是分层开发模式。
所谓的分层开发模式就是指在开发j2ee程序时,将整个程序根据功能职责进行纵向划分。
那么为什么要分层?
分层的原始驱动力也是我们之前说的对程序的可读性与可扩展性的追求。
只有把不同的功能职责的代码分开,才能使程序更加清晰明了------可读
把相似的功能归结为一个纵向层次,才使得在这个层次上研究一种通用的解决方案成为可能-----可扩展
最典型的划分方式就是将整个程序分为:表现层(Presentation Layer),业务层(Business Layer),持久层(Persistent Layer)
如下:
不同的层次,分配着不同的任务
表现层: 负责处理与用户交互的相关功能
业务层: 负责负责的业务逻辑计算与判断
持久层: 负责将业务数据进行持久化存储
不过在讨论分层的时候,我们又不得不面对两个问题
一 是否有必要分层?
二 如果分层,分几层?
先说第一个问题,如果项目很小,确实就没有必要分层了,就是俗话说的"杀鸡焉用牛刀""高射炮打蚊子";不过如果项目很大,牵扯到各个方面,那么此时使用分层开发模式就是是有意义的。
第二 如果分层,分几层?之前说了有一个最佳实践是"简单是美"所以我们希望将分层做的简单。但是实际上,对这个问题也没有绝对打答案,因为一切脱离了业务实际的架构设计都是虚幻的我们只能在实践中不断地摸索,把前人的经验作为我们程序分的重要依据。
其实我们所熟知的那些框架就是针对各个开发层次的编程问题而设计的解决方案。
例如 spring服务于业务层,hibernate服务于持久层,struts就工作再表现层。
MVC模式
在分层开发的前提下,每一层我们都可以拿出来单独研究并寻找最佳实践。对于表现层来说,MVC模式被广泛的应用,并且在此基础上创建了许多成熟的框架。(MVC是一种思想,而不是一种技术,它本身并不是代码,就像我们在程序中说的接口,记住,它只是一种思想而已)
M(Model)----数据模型
V(View)----视图展现
C(Control)----控制器
所谓的mvc模式就是通过元素分解来处理基于"请求----响应"模式的程序的开发中遇到的问题。
任何一个B/S应用,其本质就是一个"请求----响应"的处理过程集合体。
现在我们看看"请求----响应"的过程。
在图中,至少有三个元素是不可或缺的:
数据模型:
在图中就是顺着箭头方向进行传输的数据,他们是程序的核心载体。
对外交互:
我们可以理解我两部分,一个"头",一个"尾"。头是我们一切请求的开始,没有头,后面的一切都无从谈起;尾是最后的表现,我们得告诉系统外部的观察者我们最终的执行结果。
程序的执行和控制:
它不仅接受请求,也要处理请求,并且在处理完后还要负责相应跳转。
在很久之前,我们使用servlet来作为程序的执行和控制部分,后来我们有了struts,就使用了它所提供的action,也许几年后,struts也会走下历史舞台,我们会使用一种新的技术来作为程序的执行和控制。但是,如果我们忽略这些外在的表现形式,其内部不就是MVC吗?
数据模型-----------M
对外交互-----------V
程序的执行或控制----C
其实我们很早都这样用了,我们缺乏的只是把这个概念挖掘出来的能力而已。现在我们再看看一个经典的MVC模型图:
我们需要做的就是为这些框赋予不同的表现形式。其实框架干的就是这个事,只不过框架除了赋予上面几个元素一定的表现形式外还解决了各个元素运行起来所遇到的问题而已。
下一节,我们就先忘掉所有的框架,用最原始的方式来实现MVC模式,并且说说表示层所遇到的几个问题。
Struts2技术内幕 读书笔记二 web开发的基本模式的更多相关文章
- Struts2技术内幕 读书笔记一 框架的本质
本读书笔记系列,主要针对陆舟所著<<Struts2技术内幕 深入解析Strtus2架构设计与实现原理>>一书.笔记中所用的图片若无特殊说明,就都取自书中,特此声明. 什么是框架 ...
- Struts2技术内幕 读书笔记三 表示层的困惑
表示层能有什么疑惑?很简单,我们暂时忘记所有的框架,就写一个注册的servlet来看看. index.jsp <form id="form1" name="form ...
- 深入理解linux网络技术内幕读书笔记(二)--关键数据结构
Table of Contents 1 套接字缓冲区: sk_buff结构 1.1 网络选项及内核结构 1.2 结构说明及操作函数 2 net_device结构 2.1 MTU 2.2 结构说明及操作 ...
- webkit技术内幕读书笔记 (二、三)
可视区和网页 通常网页比屏幕的可视区面积要大,因此当网页内容在可视区中放不下时,一般浏览器会提供滚动条. 从URL到构建完DOM树的过程 当用户输入网页URL的时候,WebKit调用其资源加载器加载该 ...
- webkit技术内幕读书笔记 (一)
本文部分摘录自互联网. Chromeium与Chrome Chromium是Google为发展自家的浏览器Google Chrome而打开的项目,所以Chromium相当于Google Chrome的 ...
- 深入理解linux网络技术内幕读书笔记(三)--用户空间与内核的接口
Table of Contents 1 概论 1.1 procfs (/proc 文件系统) 1.1.1 编程接口 1.2 sysctl (/proc/sys目录) 1.2.1 编程接口 1.3 sy ...
- Kafka技术内幕 读书笔记之(四) 新消费者——新消费者客户端(二)
消费者拉取消息 消费者创建拉取请求的准备工作,和生产者创建生产请求的准备工作类似,它们都必须和分区的主副本交互.一个生产者写入的分区和消费者分配的分区都可能有多个,同时多个分区的主副本有可能在同一个节 ...
- MySQL技术内幕读书笔记(二)——InnoDB存储引擎
目录 InnoDB存储引擎 InnoDB存储架构 Checkpoint技术 Master Thread 工作方式 InnoDB关键特性(放一下,感觉看后面,再看总结吧) InnoDB存储引擎 Inno ...
- Kafka技术内幕 读书笔记之(二) 生产者——服务端网络连接
KafkaServer是Kafka服务端的主类, KafkaServer中和网络层有关的服务组件包括 SocketServer.KafkaApis 和 KafkaRequestHandlerPool后 ...
随机推荐
- 联想G510 在新的SSD上安装Win8.1系统,启动的时候自己加载机械硬盘的Win8.1系统
进入BIOS,选择Boot,将Boot Priority(优先),修改为Legacy(传统) First: 启动的时候就不会使用UEFI First的windows Boot Manager(wind ...
- 【SSH系列】-- Hibernate持久化对象的三种状态
在上一篇博文中,小编主要简单的介绍了[SSH系列]--hibernate基本原理&&入门demo,今天小编来继续介绍hibernate的相关知识, 大家知道,Java对象的生命周期,是 ...
- Struts2处理流程性需求的一种解决方案
在应用程序设计中,经常出现如下的需求. 查看用户填写的数据,而且数据是分页填写. 看下面这个情况 用户的信息有三页,分别是Form abc. 现在的问题是,后面的逻辑该如何设计. 如果把,FormAB ...
- ubuntu中安装samba
为了方便的和Windows之间进行交互,samba必不可少. 当然,他的安装使用也很简单: 安装: sudo apt-get install samba sudo apt-get install sm ...
- Android的GridView的用法-android学习之旅(二十七)
Gridview简介 GridView和ListView有相同的父类AbsListView.他和ListView唯一的区别是Gridview可以显示多列,如果不设置列数,就默认显示一列,变成了List ...
- web中间件切换(was切tomcat)
一.数据源迁移: ①数据源配置在web容器还是在项目本身? 根据开发与生产分离原则选择配置到web容器,以免开发泄露数据库密码. ②数据库密码加密 原先was的数据源直接在console控制,密码是密 ...
- 【一天一道LeetCode】#231. Power of Two
一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Given a ...
- CentOS 64-bit下安装JDK和Tomcat并设置Tomcat开机启动操作步骤
准备文件如下: 1.CentOS-6.4-x86_64-bin-DVD1.iso 2.jdk-7u67-linux-x64.rpm 3.apache-tomcat-7.0.55.tar.gz 安装步骤 ...
- 一致性Hash算法介绍(分布式环境算法)
32的整数环(这个环被称作一致性Hash环),根据节点名称的Hash值(其分布范围同样为0~232)将节点放置在这个Hash 环上.然后根据KEY值计算得到其Hash值(其分布范围也同样为0~232 ...
- Android图片色彩变幻
最近在做图片相关的应用,所以就各方积累到一些常用的操作,一般来说会有多种方式来实现这一功能,比如 采用色度变换 采用ColorMatrix颜色矩阵 采用对像素点的直接操作 等等,今天就复习一下第一种方 ...