小黑子的java项目开发理解

news2024/11/30 7:38:57

小黑子的理解

  • 一、基于Maven模板构建的三种常见Java项目——基于maven
  • 二、通常的java目录结构
    • utils层 工具包
    • model层(pojo层)
    • exceptions层 报错包
    • dao层(mapper层)[impl包—查询数据库]
    • service层 定义接口 [impl—实现事务]
    • controller层 [处理前台发送的请求]
    • Web层
  • 三、软件分层架构简单理解
    • 分层架构
    • 经典三层架构
    • MVC
      • 三层架构和MVC的区别与联系

一、基于Maven模板构建的三种常见Java项目——基于maven

新建Maven project项目时,需要选择archetype。archetype的意思就是模板原型的意思,原型是一个Maven项目模板工具包。原型将帮助作者为用户创建Maven项目模板,规范了项目的结构。根据所创建项目的不同,常见的三种模板有:

  • maven-archetype-quickstart
  • maven-archetype-webapp
  • cocoon-22-archetype-webapp

二、通常的java目录结构

  • src/main/java 项目的源代码所在的目录
    src/main/resources 项目的资源文件所在的目录
    src/main/filters 项目的资源过滤文件所在的目录
    src/main/webapp 如果是web项目,则该目录是web应用源代码所在的目录,比如html文件和web.xml等都在该目录下。
  • src/test/java 测试代码所在的目录
    src/test/resources 测试相关的资源文件所在的目录
    src/test/filters 测试相关的资源过滤文件所在的目录

目录实例图:
在这里插入图片描述

从一个用户访问一个网站的情况来看,对应着项目代码结构来分析,可以贯穿整个代码分层:
在这里插入图片描述

utils层 工具包

在这里插入图片描述

utils包作为一个工具类包,工具类:可以动态地生成DAO的实现类(或者说可以动态生成DAO的代理类)

model层(pojo层)

  • model层即数据库实体层,也被称为entity层,pojo层。
    在这里插入图片描述

  • 是用于存放实体的类的

  • 类中定义了多个类属性,并与数据库表的字段保持一致,一般数据库一张表对应一个实体类,类属性同表字段一一对应。

  • 主要用于定义与数据库对象应的属性,提供get/set方法,tostring方法,有参无参构造函数。

exceptions层 报错包

作为一个报错包,可自定义创建报错类,见名知意
在这里插入图片描述

dao层(mapper层)[impl包—查询数据库]

  • dao层即数据持久层,也被称为mapper层,叫数据持久层,先设计接口,然后在配置文件中进行配置其实现的关联。

  • dao层的作用为访问数据库,向数据库发送sql语句,完成数据的增删改查任务。

  • 数据持久化操作就是指,把数据放到持久化的介质中,同时提供增删改查操作,比如数据通过hibernate插入到数据库中

  • 一般都是在dao层下写给接口,然后在impl包下实现类连接接口,然后重写方法

service层 定义接口 [impl—实现事务]

  • service层即业务逻辑层。
  • service层的作用为完成功能设计。
  • service层调用dao层接口,接收dao层返回的数据,完成项目的基本功能设计。
  • 业务逻辑层,完成功能的设计 和dao层一样都是先设计接口,再创建要实现的类,然后在配置文件中进行配置其实现的关联。
  • 接下来就可以在service层调用dao层的接口进行业务逻辑应用的处理。
  • service的impl是把mapper和service进行整合的文件 封装Service层的业务逻辑有利于业务逻辑的独立性和重复利用性。

controller层 [处理前台发送的请求]

  • controller层即控制层,控制业务逻辑service

  • controller层的功能为请求和响应控制,负责前后端交互。

  • controller层接受前端请求,调用service层,接收service层返回的数据,最后返回具体的页面和数据到客户端

  • controller层主要调用Service层里面的接口控制具体的业务流程,控制的配置也要在配置文件中进行

Web层

主要是对访问控制进行转发,各类基本参数校验,或者不复用的业务简单处理等

三、软件分层架构简单理解

什么是架构分层?

分层架构是将软件模块按照水平切分的方式分成多个层,一个系统由多层组成,每层由多个模块组成。同时,每层有自己独立的职责,多个层次协同提供完整的功能。比如,我们经常提到的MVC架构,就是一种非常典型非常基础的分层方式

系统架构分层之后,往往需要达到以下目标:

  • 高内聚:分层设计可以简化系统设计,让不同层专注做某一模块的事;
  • 低耦合:层与层之间通过接口或API来交互,依赖方不用知道被依赖方的细节;
  • 复用:分层之后可以做到代码或功能的复用;
  • 扩展性:分层架构可以让代码更容易横向扩展

分层架构

在这里插入图片描述
一般分层架构由以下组成:

  • 表示层:
    • 也说是客户端层,不论是App还是Web或者其他,指客户直接接触到的页面
  • 接口层:
    • 一般是两种服务形式,即“RPC(采用Service提供RPC接口服务)”和“HTTP(通过Web封装成Http接口服务)”。这层一般不抛出异常,否则会导致client会出现不可控的错误,以通过标准的ErrorCode&ErrorMeg提示为主,一般还会有流量控制和权限等控制监控在这层
  • 业务层:
    • 所有的业务实现放在这层,一般可以按照业务类型分类也便于识别管理;事务也放在这层,一般推荐只放在这层统一管理
  • 持久层:
    • 主要有数据库的entity映射类,只提供简单CRUD的dao操作类,接口mapper类,一些连接中间件的封装util工具类;这层推荐严格禁止事务,异常可以统一封装一个
  • 数据层:
    • 数据层指存储,根据业务选择的数据存储基础设施,传统的关系型数据库Mysql、Oracle,Nosql数据库Redis、ES、Mongodb等。不同的数据库采用的connect方式不同,需要在持久层独立封装一个独立Util类进行集中管理

经典三层架构

三层架构 ,通常就是将整个业务应用划分为:表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)

在这里插入图片描述

  • 表现层(PL):

    • 通俗讲就是展现给用户的界面,对应项目中的Web层包含Servlet和Controller等
    • 负责处理用户交互和展示数据的部分。它包括用户界面(UI)、前端逻辑以及与用户交互的各种元素。在Web应用中,通常表现层由HTML、CSS、JavaScript等组成
  • 业务逻辑层(BLL):

    • 也称作领域层,负责系统业务逻辑的处理,对应项目中Service和ServiceImpl等
    • 它包括处理用户请求、验证数据、执行业务规则、数据转换等操作。在传统的三层架构中,业务逻辑层通常包含业务逻辑和数据访问逻辑
  • 数据访问层(DAL):

    • 该层所做事务直接操作数据库,针对数据的增添、删除、修改、更新、查找等,对应项目中的Dao
    • 它隐藏了底层数据存储细节,并提供高层次的接口供业务逻辑层使用
    • 它包括处理用户请求、验证数据、执行业务规则、数据转换等操作。在传统的三层架构中,业务逻辑层通常包含业务逻辑和数据访问逻辑

在开源技术框架中,表现层实现的代表作品是Struts1/2、Spring MVC,业务层实现的代表作品是Spring,持久层实现的代表作品是Hibernate和Mybatis

MVC

MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,虽然MVC并不是严格意义上的三层架构,但可以与传统的三层架构进行对比

  1. 模型(Model):

    • 表示应用程序的数据和业务逻辑,负责处理数据的读取、存储、转换和验证等操作。在传统的三层架构中,模型可以对应于业务逻辑层和数据访问层。
    • 分为两类,一类称为数据承载Bean,一类称为业务处理Bean。数据承载Bean是指实体类,专门承载业务数据的,如Student、User等。而业务处理Bean则是指Service或Dao对象,专门用于处理用户提交请求的
  2. 视图(View):

    • 表示应用程序的用户界面,负责展示数据和与用户进行交互。视图通常与表现层相对应。
  3. 控制器(Controller):

    • 作为模型和视图之间的协调者,接收用户的输入请求,根据用户请求的类型和数据,进行相应的业务处理,并决定如何更新模型和视图。控制器通常对应于业务逻辑层
    • 用于将用户请求转发给相应的Model进行处理,并处理Model的计算结果向用户提供响应

标准的MVC交互模型如下图:
在这里插入图片描述
Web MVC标准架构,如下图所示:
在这里插入图片描述

三层架构和MVC的区别与联系

MVC严格说是三层架构中的UI层,也就是说,MVC把三层架构中的UI层再度进行了分化,分成了控制器、视图、实体三个部分,控制器完成页面逻辑,通过实体来与界面层完成通话,而C层直接与三层中的BLL进行对话。

三层架构和MVC可以共存。三层架构是基于业务逻辑来分的,而MVC是基于页面来分的。MVC是表现模式(Presentation Pattern),三层架构是典型的架构模式(Architecture Pattern)。

三层架构的分层模式是典型的上下关系,上层依赖于下层。但MVC作为表现模式是不存在上下关系的,而是相互协作关系。即使将MVC当作架构模式,也不是分层模式。MVC和三层架构基本没有可比性,是应用于不同领域的技术。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1051894.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Docker-Windows安装使用

1.下载docker https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors 2.配置虚拟化环境 通过控制面板“设置”启用 Hyper-V 角色 右键单击 Windows 按钮并选择“应用和功能”。选择相关设置下右侧的“程序和功能”。选择“打开或关闭 Windows 功能”。选择“Hyper-…

Ubuntu性能分析-ftrace 底层驱动

1、框架介绍 ftrace内核驱动可以分为几部分:ftrace framework,RingBuffer,debugfs,Tracepoint,各种Tracer。 ftrace框架是整个ftrace功能的纽带,包括对内和的修改,Tracer的注册,RingBuffer的控制等等。 RingBuffer是静态动态ftrace的载体。 debugfs则提供了用户空间…

【李沐深度学习笔记】Softmax回归

课程地址和说明 Softmax回归p1 本系列文章是我学习李沐老师深度学习系列课程的学习笔记,可能会对李沐老师上课没讲到的进行补充。 Softmax回归 虽然它名字叫作回归,但是它其实是分类问题 本节课的基础 想要学会本节课得需要一点基础&#xff0c…

day9.30

消息队列实现进程之间通信方式代码&#xff0c;现象 #include<myhead.h>//消息结构体 typedef struct {long msgtype; char data[1024]; }Msg_ds;#define SIZE sizeof(Msg_ds)-sizeof(long) int main(int argc, const char *argv[]) {//1、创建key值…

安全渗透测试基础之-Nessus漏洞扫描工具(安装下载)

【注:本文中所需软件请回复公众号后获取,有任何问题请留言,看到会第一时间回复,毕竟我有自己的工作,分享经验并不是主业,不能时刻关注到。如果您觉得我写的好,请记得将公众号设为星标公众号,否则下次可能找不到。先谢谢各位愿意努力奋斗的小伙伴们了。】 本篇是安装下…

UML学习笔记

前言 UML&#xff08;Unified Modeling Language&#xff09;是一种对软件密集系统进行可视化建模的一种语言。有了图后来就可以一目了然。 C中有好多继承图&#xff0c;我都看不懂&#xff0c;所以就来学习一波&#xff5e; -代表私有&#xff08;private&#xff09;的表示…

经典网络解(三) 生成模型VAE | 自编码器、变分自编码器|有监督,无监督

文章目录 1 有监督与无监督2 生成模型2.1 重要思路 3 VAE编码器怎么单独用&#xff1f;解码器怎么单独用&#xff1f;为什么要用变分变分自编码器推导高斯混合模型 4 代码实现 之前我们的很多网络都是有监督的 生成网络都是无监督的&#xff08;本质就是密度估计&#xff09;&a…

5、Linux驱动开发:设备-设备注册

目录 &#x1f345;点击这里查看所有博文 随着自己工作的进行&#xff0c;接触到的技术栈也越来越多。给我一个很直观的感受就是&#xff0c;某一项技术/经验在刚开始接触的时候都记得很清楚。往往过了几个月都会忘记的差不多了&#xff0c;只有经常会用到的东西才有可能真正记…

12、Kubernetes中KubeProxy实现之iptables和ipvs

目录 一、概述 二、iptables 代理模式 三、iptables案例分析 四、ipvs案例分析 一、概述 iptables和ipvs其实都是依赖的一个共同的Linux内核模块&#xff1a;Netfilter。Netfilter是Linux 2.4.x引入的一个子系统&#xff0c;它作为一个通用的、抽象的框架&#xff0c;提供…

华为智能高校出口安全解决方案(3)

本文承接&#xff1a; https://qiuhualin.blog.csdn.net/article/details/133267254?spm1001.2014.3001.5502 重点讲解华为智能高校出口安全解决方案的攻击防御&安全运维&日志审计的部署流程。 华为智能高校出口安全解决方案&#xff08;3&#xff09; 课程地址攻击防…

git报错:Failed to connect to 127.0.0.1 port 1080

Bug描述 由于在试了网上的这条命令 git config --global http.proxy socks5 127.0.0.1:1080 git config --global https.proxy socks5 127.0.0.1:1080git config --global http.proxy 127.0.0.1:1080 git config --global https.proxy 127.0.0.1:1080Bug描述&#xff1a;Faile…

对负采样(negative sampling)的一些理解

负采样&#xff08;negative sampling&#xff09;通常用于解决在训练神经网络模型时计算softmax的分母过大、难以计算的问题。但在LightGCN模型论文的BPR LOSS中&#xff0c;负采样的概念可能与传统的softmax分母问题不完全一样。 在LightGCN模型中&#xff0c;不同于传统的协…

Spring结合自定义注解实现 AOP 切面功能【详解】

Spring结合自定义注解实现 AOP 切面功能 Spring AOP 注解概述Aspect 快速入门execution 切点表达式 拦截指定类的方法Pointcut("annotation(xx)") 拦截拥有指定注解的方法常用注解1.Before&#xff1a;在切点方法前执行2.After&#xff1a;在切点方法后执行3.Around&…

Python爬虫获取百度图片+重命名+帧差法获取关键帧

&#xff08;清库存&#xff09; 获取图片 重命名 帧差法 爬虫获取图片文件重命名帧差法获取关键帧 爬虫获取图片 # 图片在当前目录下生成import requests import renum 0 numPicture 0 file List []def dowmloadPicture(html, keyword):global num# t 0pic_url re.fin…

【JVM】运行时数据区之 堆——自问自答

Q:堆和栈&#xff0c;在设计上有何用义&#xff1f; 此处我们不说数据结构的概念。 堆本身是一种存储结构&#xff0c;在代码的内存层面来看&#xff0c;无论是c 操作的原生内存&#xff0c;还是Java 背后的JVM&#xff0c;堆的作用都是进行持久存储的。 这个持久存储并不是…

集合-Collection

系列文章目录 1.集合-Collection-CSDN博客 文章目录 目录 系列文章目录 文章目录 前言 一 . 集合的继承体系 二 . 什么是Collection? 三 . 常用方法 1.add(Object element): 将指定的元素添加到集合中。 2. remove(Object element): 从集合中移除指定的元素。 3. bo…

国庆day1---消息队列实现进程之间通信方式代码,现象

snd&#xff1a; #include <myhead.h>#define ERR_MSG(msg) do{\fprintf(stderr,"__%d__:",__LINE__);\perror(msg);\ }while(0)typedef struct{ long msgtype; //消息类型char data[1024]; //消息正文 }Msg;#define SIZE sizeof(Msg)-sizeof(long)int main…

HP E1740A 模拟量输入模块

HP&#xff08;惠普&#xff09;E1740A 模拟量输入模块是一种用于数据采集和测量的工控模块&#xff0c;通常用于各种自动化和监测应用中。以下是该模拟量输入模块的一些可能特点和功能&#xff1a; 多通道输入&#xff1a; E1740A 模块通常具有多个模拟量输入通道&#xff0c;…

windows的arp响应

1.原理‘ 2.场景 3.步骤

YOLOv8+swin_transfomerv2

测试环境&#xff1a;cuda11.3 pytorch1.11 rtx3090 wsl2 ubuntu20.04 踩了很多坑&#xff0c;网上很多博主的代码根本跑不通&#xff0c;自己去github仓库复现修改的 网上博主的代码日常出现cpu,gpu混合&#xff0c;或许是人家分布式训练了&#xff0c;哈哈哈 下面上干货…