J2EE基于MVC的各层的设计原则及其编写注意事项

2024-06-08 03:58

本文主要是介绍J2EE基于MVC的各层的设计原则及其编写注意事项,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

总结了下J2EE的MVC模式开发原则,很多细节处理好了是很有利于开发与维护的。

下面就从各层说起。
视图层

主要是客户端的显示,主要是JSP和HTML,随着Web的不断发展,许多基于Javascript的富应用客户端不断出现,越来越流行通过JSON格式进行前后台数据交互。

控制层:
Control:

作为处理分发器,组装前台需要的数据给客户端。

服务层(Service 业务逻辑层):

存放业务控制,在Service层中将dao的操作组合起来放入事务中。操作文件之类的都放到Service中。

Service中尽量复用dao中的操作,涉及到一张表产生的业务放入到dao中。

VO(Value Object,ViewObject)是符合Java Bean属性规范的简单Java对象,由new关键字创建,由业务逻辑使用,为数据提供一个生存的地方。主要对应界面显示数据的对象,用一个VO对应一个请求的所有数据。

Dao(数据访问层):
dao:

存放基本的操作,真正起到数据库的操作。

Dao只能操作单表,跨表的操作,放到Service中。

Model:

一般来所一张表对应一个Model,一些中间表就不用创建Model,可以把中间表操作的相关方法直接写到和中间表相关的Model中。

Domain:

是一个范围,接线,作为一个领域,常放到一个包中。

  分层的好处:架构与管理,增加可维护性。这里特别强调的就是命名规范。先架构再编码。

分层开发遵守的原则:

① 上层依赖于下层,依赖关系不跨层;

② 一切设计都从Service层出发,作为一个系统首先需要把握其业务。从系统需要提供的功能进行分析,来确定Service接口中的方法,而不是从数据库出发到dao和Domain,再到Service层。不要对系统分层产生了误解,还是从最重要的功能来考虑的;

③ 事务控制放到Service中;

④ Service层的设计,需要考虑控制Service的数量,通常将一个模块的服务放到一个Service中来处理,从Service层往下看,接口逐渐增多;

⑤ 服务层的实现依赖于领域活动。最核心的设计就是将系统中的实体划分为领域模型,在此基础上设计dao层,再把这些操作暴露给Service层;

⑥ 每一个接口的职责范围有明确目的。这样设计是有问题的:一表对应一个dao,一个dao对应一个domain,一个domain对应一个Service,导致Service接口和dao的接口基本一致。最终Service里面太多的方法,然后,只能在Control层中反复调用Service,这样的代码是不堪入目的。可以这样做,一个domain活动聚合对应的一组dao来完成领域活动,而在Service也可能包含两个domain活动;

⑦ 每一个层中的接口都关注自己的那一块,不能在一个Dao中随意操作别的表,这样只能让项目更加难以维护。

最后说一句话吧:拙略的架构设计会降低系统的性能,不要从框架和数据库或应用服务器上找错,尝试优化一下自己的设计。

这篇关于J2EE基于MVC的各层的设计原则及其编写注意事项的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1041143

相关文章

Mysql中设计数据表的过程解析

《Mysql中设计数据表的过程解析》数据库约束通过NOTNULL、UNIQUE、DEFAULT、主键和外键等规则保障数据完整性,自动校验数据,减少人工错误,提升数据一致性和业务逻辑严谨性,本文介绍My... 目录1.引言2.NOT NULL——制定某列不可以存储NULL值2.UNIQUE——保证某一列的每一

C++中detach的作用、使用场景及注意事项

《C++中detach的作用、使用场景及注意事项》关于C++中的detach,它主要涉及多线程编程中的线程管理,理解detach的作用、使用场景以及注意事项,对于写出高效、安全的多线程程序至关重要,下... 目录一、什么是join()?它的作用是什么?类比一下:二、join()的作用总结三、join()怎么

Java 方法重载Overload常见误区及注意事项

《Java方法重载Overload常见误区及注意事项》Java方法重载允许同一类中同名方法通过参数类型、数量、顺序差异实现功能扩展,提升代码灵活性,核心条件为参数列表不同,不涉及返回类型、访问修饰符... 目录Java 方法重载(Overload)详解一、方法重载的核心条件二、构成方法重载的具体情况三、不构

Go语言中nil判断的注意事项(最新推荐)

《Go语言中nil判断的注意事项(最新推荐)》本文给大家介绍Go语言中nil判断的注意事项,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1.接口变量的特殊行为2.nil的合法类型3.nil值的实用行为4.自定义类型与nil5.反射判断nil6.函数返回的

MySQL 获取字符串长度及注意事项

《MySQL获取字符串长度及注意事项》本文通过实例代码给大家介绍MySQL获取字符串长度及注意事项,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录mysql 获取字符串长度详解 核心长度函数对比⚠️ 六大关键注意事项1. 字符编码决定字节长度2

C++链表的虚拟头节点实现细节及注意事项

《C++链表的虚拟头节点实现细节及注意事项》虚拟头节点是链表操作中极为实用的设计技巧,它通过在链表真实头部前添加一个特殊节点,有效简化边界条件处理,:本文主要介绍C++链表的虚拟头节点实现细节及注... 目录C++链表虚拟头节点(Dummy Head)一、虚拟头节点的本质与核心作用1. 定义2. 核心价值二

详解MySQL中DISTINCT去重的核心注意事项

《详解MySQL中DISTINCT去重的核心注意事项》为了实现查询不重复的数据,MySQL提供了DISTINCT关键字,它的主要作用就是对数据表中一个或多个字段重复的数据进行过滤,只返回其中的一条数据... 目录DISTINCT 六大注意事项1. 作用范围:所有 SELECT 字段2. NULL 值的特殊处

MySQL 打开binlog日志的方法及注意事项

《MySQL打开binlog日志的方法及注意事项》本文给大家介绍MySQL打开binlog日志的方法及注意事项,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 目录一、默认状态二、如何检查 binlog 状态三、如何开启 binlog3.1 临时开启(重启后失效)

MyBatis设计SQL返回布尔值(Boolean)的常见方法

《MyBatis设计SQL返回布尔值(Boolean)的常见方法》这篇文章主要为大家详细介绍了MyBatis设计SQL返回布尔值(Boolean)的几种常见方法,文中的示例代码讲解详细,感兴趣的小伙伴... 目录方案一:使用COUNT查询存在性(推荐)方案二:条件表达式直接返回布尔方案三:存在性检查(EXI

python编写朋克风格的天气查询程序

《python编写朋克风格的天气查询程序》这篇文章主要为大家详细介绍了一个基于Python的桌面应用程序,使用了tkinter库来创建图形用户界面并通过requests库调用Open-MeteoAPI... 目录工具介绍工具使用说明python脚本内容如何运行脚本工具介绍这个天气查询工具是一个基于 Pyt