原作者的blog地址:http://www.blogjava.net/sitinspring
一般来说, 在创建一个应用程序之前,首先要决定这个应用程序的体系结构。应用程序体系结构(Application Architecture)由应用程序开发者设计,它指定了在各种各样的终端系统上,应用程序是如何组织在一起的。为了降低设计难度,大部分程序都以层(称为layer或level)的方式组织在一起,每一层都建立在它的下层基础上,使用下层提供的服务,下层对上层隐藏了许多服务实现的细节。这种方法几乎应用于整个计算机科学领域,也可以称为信息隐藏,数据类型抽象,数据封装,面向对象编程等。
分层即是对类进行一些规划,以流程中的类的用途和所处环节划分,把程序中将要用到的各个类分别归纳到各个包(目录)中。分层是对系统进行细分的第一步,它旨在将系统按具体功能和用途分解为相对独立的各个部分.如果说细分是将把难以解决的大问题分解成了各个容易解决的小问题的话,分层则是把解决同类小问题的类归纳到一起,这样程序的结构更加清晰,程序的可读性和可维护性越好,也更容易得到重用。
从大的尺度来讲,一个程序可粗略的分成三个层次:
界面层(UI layer),这是用户能直接感受到的,包含显示和控制两部分;
业务层(Business layer),其中包含了业务逻辑和业务处理;
持久层(Persistence layer),它用来将数据存储和将数据从持久层提取出来。
1.界面层(UI layer)中,包含两个层次:视图层View和控制层Controller.
视图层View是用户查看数据,输入和向用户输出结果的一层,这一层是用户唯一能够感受软件功能的窗口,它或者由Swing组件搭建(桌面系统或C/S系统中),或者由JSP搭建(B/S系统),它负责让用户输入数据和将控制层返回的数据显示给客户。其中返回的数据一般是领域对象的变体或者直接就是领域对象或其集合。在Web程序中jsp基本就属于这一层的。
控制层Controller是用来将界面和业务层联系在一起的,在系统的各层次中,应该和View层打交道一般只有Controller层, Controller层是View层和系统其它层次进行交互的中介者, View层越过中介者直接调用其它层次的行为应该尽量避免。
框架类(Framework Classes):这些类一般由固定的框架提供,程序员不能改变.在类的层次上它一般处于界面和业务层之间,即控制层的位置,jsp/servlet中的Servlet,Struts1,2中的Action都是这样的类,它承担了接受用户输入,并展示业务处理的结果的任务.
一般来说,为了减少耦合,提高程序的可维护性,我们一般采用MVC架构模式将业务层,视图层和控制层分开。
2.业务层(Business layer)中包含领域层 Domain,服务层 Service和实用工具层Util。
业务层是整个系统的关键部分,它主要由领域模型和业务逻辑组成,领域模型定义系统内相互作用的各个实体,业务逻辑则定义了领域模型所能执行的不同操作, 领域层的各个类代表了领域模型,而服务层的各个类代表了业务逻辑. 领域层和服务层是起点,其它各层都从这里起步.
领域层 Domain:领域对象是对现实世界业务处理对象的抽象和归纳,领域层中的类基本上都是实体(Entity)类,如员工管理系统中的Employee,学籍管理系统中的Student,借贷管理系统中的Contract等,系统的业务处理中用到那些实体对象,领域层中一般就应该有和这个实体对象相对应的实体类。这些类在刚开始设计时可能只有一些属性和对应的getter/setter方法,以后会不断的加入新的内容(主要是方法),如果有必要的话,可以为这些领域对象设计一些上层的抽象类或者接口,借助于泛型,反射,控制反转等高级技能能在一定程度上简化程序的编写过程。此外,领域层是程序的核心内容,因为其他层次都在很大程度上依赖Domain层的设计,如果这一层设计不够完善会使以后的工作步履蹒跚.
服务层Service:这一层就是为领域对象提供服务用的,领域对象一般不直接和表现层,持久层直接打交道而是通过服务层进行代理.服务层是UI层到持久层的中间通道,它处于上通界面下通持久层的中间环节,这个特性是使的这一层决定了软件功能的多少。
一般来说,UI层向服务层传入的是用户输入的一些参数,服务层进行验证,重组后向下层DAO传输;而服务层从Dao层收到的是领域对象或其集合,而它向UI层返回的是领域对象或者其集合的变体或者直接是领域对象或者其集合本身。Service诸类的实例在桌面程序和CS程序中一般作为Model的一个私有成员,而在Web程序中常常要用到时再创建出来。除领域层外,其余各层是在围绕它而设计.通道类(Plumbing Classes,当传输实体类的通道)
实用工具层Util:
这一层相对简单,它包含了各种工具类,类中包含的主要是静态函数和静态成员变量,这些类对共通的函数,变量进行了归纳,它旨在消除重复代码,降低主体代码的复杂程度.一般此层中类的复用程度很高.值得通过项目积累. 辅助类(Assistant Classes)
3.持久层(Persistence layer)是直接与持久介质打交道的层次,持久介质可以是常见的关系型数据库,文件甚至Web Service,它一般包含两个部分。
数据存储对象层(DAO层),sql语句一般写在这层中, 然后由它调用;DAO层是最低的一层,与持久介质直接打交道,它包含具体文件的位置,数据库连接等;通道类(Plumbing Classes,当传输实体类的通道)
另一个部分就是持久介质,通常是关系型数据库。
Dao层中各个类一般作为Service的私有成员,供Service调用。
如何从需求中分析出诸个层次中的类呢,我们在大尺度上可以按照下面的步骤进行:
Domain the first:首先从业务流和业务规则中归纳总结出领域对象.
Service the second:为领域对象设计服务类。
Persistence the third:持久层的负责领域对象持久化到持久介质以及逆过程,它的设计在领域层和服务层之后,比较典型的持久层设计有数据库表的设计和ER图(实体关系图)的绘制.
View the last:最后设计表现层,表现层受领域层和服务层制约, 容易变化且易于修改,通常放在最后实现.
4.具体步骤如下
1)理解,分析,钻研需求,彻底了解你的客户想要什么,需要你做些什么.
2)将大系统分解成一个个子系统,细分出各个层次,搞清楚各层的任务。
3)分析业务逻辑,归纳出业务流.
4)从业务流和业务规则中总结出领域对象.
5)为领域层实现服务层.
6)以Domain层和Service层为核心设计表现层和持久层,直到形成完整的程序.
7)加入实用层消除重复代码,梳理结构和简化流程,.
8)限制跨层的调用.
- 描述: 分层结构
- 大小: 16.4 KB
- 描述: 各层间的交互
- 大小: 28.7 KB
分享到:
相关推荐
这一方法论首先关注的是“用什么做”,即识别和定义应用程序中的基本组成单元——对象和类,然后才考虑“做什么”,即具体实现功能。对象作为程序的基本单位,代表了现实世界中的实体,如汽车、房屋、文本框、按钮等...
应用程序从SQL Server向国产神通数据库移植的过程涉及多个知识点,包括数据库基础知识、ODBC接口、数据处理等。下面将详细阐述这些知识点: 1. 数据库基础 数据库是存储、管理、处理和检索数据的系统。在数据库系统...
本文主要探讨了SQL Server数据库的安全策略及其在应用程序中的应用,旨在提高数据库的安全管理水平。 首先,SQL Server数据库的安全策略主要包括账户登录认证和访问许可确认。登录认证分为混合模式和Windows身份...
【缓存技术浅谈】 缓存技术是一种优化性能的关键手段,尤其在Web应用系统中扮演着重要角色。本文将探讨缓存的基本概念、其在Web应用系统中的作用以及各种类型的缓存技术。 缓存,也称作Cache,是高速缓冲存储器,...
对于需要在Java平台上连接和操作数据库的应用程序,通常会使用Java Database Connectivity(JDBC)技术。 JDBC是一种在Java语言中提供的数据库连接标准接口,它通过驱动程序与数据库进行通信。首先,需要下载并安装...
"浅谈单片机程序设计中的“分层思想”" 本文总结了单片机程序设计中的重要思想之一,即“分层思想”。通过分析单片机学习板和实际项目应用中的差异,作者强调了硬件设计和软件设计的平衡关系,并引入了“映射”的...
Linux 设备驱动程序浅谈 Linux 设备驱动程序是指用于操作系统和硬件设备之间的交互接口。它是一个小程序,包含有关硬件设备的信息,用于管理计算机的硬件资源。 Linux 设备驱动程序扮演沟通的角色,把硬件的功能...
1)建立在MVC这种公认的好的模式上的,struts在M,V,C上都有涉及,但它主要是提供一个好的控制器和一套定制的标签库,也就是说它的着力点在C和V上,有mvc的一系列有点,如:结构层次分明,高可重用性,增加了程序的...
微信小程序作为一种轻量级的应用程序,无需下载安装即可使用,它的出现改变了用户获取信息和服务的方式,对于提升用户体验、拓展服务范围和增强服务互动性方面发挥了重要作用。 首先,微信小程序在园林建设中的一个...
在《浅谈电子信息工程的应用》中,作者探讨了这一技术在建设工程项目管理中的应用及其必要性,揭示了信息化管理在建筑行业所面临的挑战及解决之道。 当前,国内建设工程项目信息化管理已经逐渐兴起,但同时也面临...
尽管第三层交换机能够提高数据包转发效率,但它仍然存在一定的局限性,例如对特定应用程序的流量控制不足。第四层交换机弥补了这一缺陷,它能够查看和分析传输层的协议信息,例如源和目的端口号,这对于管理和优化...
它不仅应用了第三层交换机中的IP交换技术,更重要的是它站在更高层次上,可以查看第三层数据包头源地址和目的地址的内容,可以通过基于观察到的信息采取相应的动作,实现带宽分配、故障诊断和对TCP/IP应用程序数据流...
《浅谈电子信息工程管理中电子计算机技术的应用》 随着信息技术的飞速发展,电子计算机已经渗透到社会的各个角落,对于电子信息工程管理而言,电子计算机技术的应用显得尤为重要。本文旨在探讨电子计算机技术在电子...
3. **支持异构环境**:J2EE应用程序可以在不同的操作系统、中间件和硬件平台上运行,极大地提高了应用的可移植性和灵活性。 4. **可伸缩性**:J2EE平台支持根据业务增长动态调整系统规模,确保了系统的稳定性和...
### 浅谈职业中专计算机C语言教学中循环应用 #### 一、“循环”的结构 在C语言教学中,循环是一种极为重要的结构,它能够帮助程序员处理重复性任务,简化代码,提高程序效率。学生要学好C语言,就必须掌握其基本...
PLC控制器通过采样输入信息、执行控制程序和结果输出这三个步骤实现控制操作,具有广泛的应用领域。 皮带运输作为煤矿井下作业的核心环节,其效率和能耗直接影响到煤矿企业的经济效益。通过PLC对煤矿井下皮带运输机...
在ASP.NET框架中,数据库控件是开发人员用来高效地显示和操作数据的关键工具。本文将深入探讨五种主要的数据库控件:GridView、...理解并熟练运用这些控件,将极大地提升ASP.NET应用程序的数据呈现效率和用户体验。
在探讨基于TCP/IP的网络单片机应用方面,首先要了解单片机的基础概念和使用范围,然后深入分析TCP/IP协议的不同层次,以及如何在实际应用中选择合适的网络单片机芯片,并探讨其在各个领域的具体应用。 首先,单片机...