最佳实践

在讨论基本模式之前,我们先说说一个词:最佳实践

任何程序的编写都得遵循一个特定的规范。这种规范有约定俗称的例如:包名全小写,类名每个单词第一个字母大写等等等等;另外还有一些需要我们严格遵守的:例如我们写自己的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开发的基本模式的更多相关文章

  1. Struts2技术内幕 读书笔记一 框架的本质

    本读书笔记系列,主要针对陆舟所著<<Struts2技术内幕 深入解析Strtus2架构设计与实现原理>>一书.笔记中所用的图片若无特殊说明,就都取自书中,特此声明. 什么是框架 ...

  2. Struts2技术内幕 读书笔记三 表示层的困惑

    表示层能有什么疑惑?很简单,我们暂时忘记所有的框架,就写一个注册的servlet来看看. index.jsp <form id="form1" name="form ...

  3. 深入理解linux网络技术内幕读书笔记(二)--关键数据结构

    Table of Contents 1 套接字缓冲区: sk_buff结构 1.1 网络选项及内核结构 1.2 结构说明及操作函数 2 net_device结构 2.1 MTU 2.2 结构说明及操作 ...

  4. webkit技术内幕读书笔记 (二、三)

    可视区和网页 通常网页比屏幕的可视区面积要大,因此当网页内容在可视区中放不下时,一般浏览器会提供滚动条. 从URL到构建完DOM树的过程 当用户输入网页URL的时候,WebKit调用其资源加载器加载该 ...

  5. webkit技术内幕读书笔记 (一)

    本文部分摘录自互联网. Chromeium与Chrome Chromium是Google为发展自家的浏览器Google Chrome而打开的项目,所以Chromium相当于Google Chrome的 ...

  6. 深入理解linux网络技术内幕读书笔记(三)--用户空间与内核的接口

    Table of Contents 1 概论 1.1 procfs (/proc 文件系统) 1.1.1 编程接口 1.2 sysctl (/proc/sys目录) 1.2.1 编程接口 1.3 sy ...

  7. Kafka技术内幕 读书笔记之(四) 新消费者——新消费者客户端(二)

    消费者拉取消息 消费者创建拉取请求的准备工作,和生产者创建生产请求的准备工作类似,它们都必须和分区的主副本交互.一个生产者写入的分区和消费者分配的分区都可能有多个,同时多个分区的主副本有可能在同一个节 ...

  8. MySQL技术内幕读书笔记(二)——InnoDB存储引擎

    目录 InnoDB存储引擎 InnoDB存储架构 Checkpoint技术 Master Thread 工作方式 InnoDB关键特性(放一下,感觉看后面,再看总结吧) InnoDB存储引擎 Inno ...

  9. Kafka技术内幕 读书笔记之(二) 生产者——服务端网络连接

    KafkaServer是Kafka服务端的主类, KafkaServer中和网络层有关的服务组件包括 SocketServer.KafkaApis 和 KafkaRequestHandlerPool后 ...

随机推荐

  1. Python 制作Android开发 所需的适配不同分辨率的套图

    使用Python做起工具来还真是爽,简单,方便,快捷.今天忙活了一下,制作出一个比较实用的小工具. 自动化套图制作,适配不同屏幕 尤其是对于android开发来说,要适配不同屏幕就需要多套切图,那么. ...

  2. LuaHotUpdate原理

    LuaHotUpdate原理(金庆的专栏)项目地址:https://github.com/asqbtcupid/lua_hotupdate只更新函数,不更新数据.主页上有个动画演示.限Windows平 ...

  3. Android Multimedia框架总结(十二)CodeC部分之OMXCodec与OMX事件回调流程

    转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼yuiop:http://blog.csdn.net/hejjunlin/article/details/52629449 前言:上篇文中分析 ...

  4. activity的启动模式和栈管理

     在学习Android的过程中,Intent是我们最常用Android用于进程内或进程间通信的机制,其底层的通信是以Binder机制实现的,在物理层则是通过共享内存的方式实现的.     Intent ...

  5. Android传感器

    Android传感器 开发传感器应用 1. 获取传感器管理者对象 // 获取传感器管理者对象 SensorManager mSensorManager = (SensorManager) getSys ...

  6. Web开发学习之路--Eclipse+Tomcat+mysql之初体验

    学习了一段时间android,正好要用到android和服务器之间的交互,既然要学习android,那么就涉猎下服务器端的开发了,以前学过php,用thinkphp很快可以搭建起来,但是android ...

  7. J2EE学习从菜鸟变大鸟之九 深入浅出理解 Servlet-----实例解析

    关于Servlet的基础内容在前面已经和大家分享过了,参考J2EE学习从菜鸟变大鸟之七 Servlet,现在结合到DRP中学习,深刻的体会Servlet起到了枢纽中转的作用,控制逻辑(到MVC中更像是 ...

  8. Common Bit Tasks

    1) If you XOR a bit with its own negated value, you will always get 1. Therefore thesolution to a ^ ...

  9. Android初级教程理论知识(第一章快速入门)

    一.综合介绍. Android项目的目录结构 Activity:应用被打开时显示的界面 src:项目代码 R.java:项目中所有资源文件的资源id Android.jar:Android的jar包, ...

  10. Deploying Customizations in Oracle E-Business Suite Release 12.2

    DeployingCustomizations in Oracle E-Business Suite Release 12.2 This documentdescribes how to deploy ...