代码结构中Dao,Service,Controller,Util,Model是什么意思

项目github地址:bitcarmanlee easy-algorithm-interview-and-practice
欢迎大家star,留言,一起学习进步

1.先名词解释吧:

DAO = Data Access Object = 数据存取对象

Service = 服务

Controller = 控制器

Util = 工具

Model = 模型

首先,一个代码是不是有完善的结构,和是不是有上面这些东西没有什么关系,只是通常来说,我们做一个大项目会把项目分解成很多不不同的模块(Module),然后根据用途和角色,我们对这些模块有一个通用的命名规则,这也就是上面这些英文单词的来历。所以,请一定记住,项目中是否包含这些模块或者单词,和你的项目结构是否完善一毛钱关系没有。但是当你的项目结构相对完善的时候,你会发现有这样一些角色的存在。

接下来一个个的来详细讨论一下这个东西是如何出现的:

2.DAO

DAO,数据存取对象。通常我们会遇到很多要和数据库打交道的场景,如果为每一个场景都去写一些SQL语句,会让我们代码变得很奇怪,我们希望我们的代码比较干净整洁,那么一个很容易想到的方案就是把数据库封装一下,让我们和数据库的交道看起来比较像和一个对象打交道。这个对象通常就是DAO,当我们操作这个对象的时候,这个对象会自动的产生SQL语句来和数据库打交道,而我们只需要和DAO打交道就可以了。
当然,从本质上来说,DAO并不需要和数据库有什么必然的联系,DAO只是数据存取对象的缩写,所以只要是把数据持久化包装成一个对象的访问(读写),这种对象都可以被称之为DAO,譬如,用JSON格式存到硬盘上。

3.Service

Service,我们有时候会需要一些相对独立,与业务系统没啥关系的功能。但不是所有的功能都可以做成一个服务,服务是一个相对独立的功能模块,完成一些指定的工作,这些工作高度抽象和通用。一个典型的服务像是数据库服务、缓存服务、文件存储服务、身份验证服务、消息队列服务等。
关系型数据库服务可以视为是一个接收SQL语句并给出一个查询结果的服务,我们不必关心服务内部具体是如何处理问题的,我们只需要关注服务给出的接口。
并不是所有的模块都适合做成服务,一个服务首先最重要的是独立性,这个服务必须可以独立的完成指定的工作。复杂的服务可能依赖于一个或者多个更基础的服务,但是服务通常不应当依赖于任何具体的业务代码,服务必须具有高度的抽象性。关系型数据库服务就具有高度的抽象性,事实上只要我们撰写标准的SQL,不论后面是MySQL、SQL Server还是Oracle,他们都会呈现出几乎完全相同的行为。
一个更为简单的服务像是缓存服务,我们把一坨数据放进去,在一段时间内可以快速的获取这坨数据,在一段时间后数据就会消失。
当你的代码需要一个高度抽象高度标准化的功能,而这个功能又不能简单的实现,或者这个功能需要很多资源的配合,例如缓存服务需要内存资源,而数据库服务通常需要磁盘资源,身份验证服务通常需要数据库服务支持。这个时候就可以考虑将这个功能模块做成一个服务。
服务作为基础的部件,我们通常会要求它能够应付各种各样的情况,一个优质的服务通常会有非常高的可用性,因为我们的系统可能会依赖于各种各样的服务,而整个系统的可用性将不可能比其中任何一个服务的可用性更高。
所以服务的特征:抽象、独立、稳定。

评论中提到Java项目中的Service通常是指Business Service,这里也简单说说。
很多时候,我们发现服务的特征对于我们开发一个大型项目的时候很有帮助。就拿独立性来说,关系型数据库服务如SQL Server可以独立发售,独立安装和部署。它可以自行测试自己的接口,如果都达到了预期的效果,并且能够应付各种情况,这个服务就可以作为一个产品独立的出售给我们安装。这意味着关系型数据库服务并不需要配合我们的业务系统一起进行测试和调试,或者作出什么变更。
在完成一个大型的业务系统时,我们发现一些子模块或者子系统也可以像服务一样独立的部署和测试。例如会员系统、支付系统、订单系统等等,他们的业务逻辑可能非常复杂,但是逻辑相对独立,并且高度内聚。如果我们将这些系统分别独立的测试和部署,就可以大大的降低我们的测试、部署和运维的成本。
这些可以独自完成某一方面业务功能,高度内聚,可以独立部署测试的模块,我们可以称之为Business Service,业务服务。它同样具有服务的特征,抽象、独立和稳定。一个会员系统内部的逻辑可能非常复杂(积分规则,分级规则,风险控制,行为数据),但是在其外部,会员的概念可以非常简单。

4.Util

Util,Util通常来说是我们找不到合适的名字的时候的选择,Util就是工具,在做项目的时候我们总会遇到一些奇奇怪怪的小功能或者重复的代码需要提取。像是URL编码或者解码(当然这个类库通常会提供,不过就以 .NET Framework 为例,提供这个方法的类型名称叫做HttpUtility),或是自创的加密签名算法等等。

5.Model

Model,模型,通常来讲,我们会把模型和另一个东西放在一起来说:View,视图。

模型通常认为是视图的内核,何谓之视图?我们正在与之交互的知乎网站的界面就是视图,而模型是指他的内核:数据。

知乎的数据是问题和答案,问题分为标题和描述,答案有内容和作者以及各种状态。知乎有很多个UI,例如移动页面,普通PC页面,手机APP,以及改版前的旧界面,这些被称作不同的视图。而所有这些形态迥异的视图,其内核都是一样的,这个内核我们就称之为模型(Model)。

将Model和View的概念拆分开来,有助于我们关注不同的方面,也可以更有效的分工。有些工程师更关注于内核也就是模型,通常来说,他们被称之为后端工程师。有些工程师更关注于用户界面的交互和展示,通常来说,他们被称之为前端工程师。

原文链接:
https://www.zhihu.com/question/58410621/answer/157049250

  • 23
    点赞
  • 73
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
这是一个关于"Spring Boot 024企业客户管理系统"的项目,该项目使用Spring Boot和MySQL进行设计和实现。这个项目是一个完整的Java毕业设计项目,包含了所有的源代码和一个.zip文件。项目的主要功能包括:客户信息管理:包括添加、修改、删除和查询客户信息。客户服务管理:包括服务记录的添加、修改、删除和查询。客户交易管理:包括交易记录的添加、修改、删除和查询。用户管理:包括用户的添加、修改、删除和查询。权限管理:包括角色的分配和权限的管理。项目的源代码主要包括以下几个部分:Controller层:负责处理用户请求,调用Service层的业务逻辑。Service层:负责处理业务逻辑,调用DAO层的数据操作。DAO层:负责操作数据库,包括数据的增删改查。Model层:负责定义数据模型,包括客户、服务、交易和用户等。Util层:负责提供一些工具类和方法,如分页工具、日期工具等。Config层:负责配置项目,包括数据库配置、日志配置等。项目的数据库设计主要包括以下几个表:客户表:存储客户的信息。服务表:存储服务的信息。交易表:存储交易的信息。用户表:存储用户的信息。角色表:存储角色的信息。权限表:存储权限的信息。这个项目是一个很好的Java毕业设计项目,可以帮助你学习和理解Spring Boot和MySQL的使用,也可以帮助你提高你的编程技能和项目管理能力。
软件系统设计⽅案 软件系统设计⽅案 前⾔ 前⾔ 本⽂根据⾼级软件⼯程课上所学知识,对⼯程实践项⽬-⽹上书城进⾏软件系统分析和设计,最终形成软件系统概念原型。 参考资料: ⼀、系统架构 ⼀、系统架构 系统采⽤MVC架构,MVC包括模型层(Model)、视图层(View)、控制器层(ControllerModel代表⼀个存取数据的对象及其数据模型。 View代表模型包含的数据的表达⽅式,⼀般表达为可视化的界⾯接⼝。 Controller作⽤于模型和视图上,控制数据流向模型对象,并在数据变化时更新视图。控制器可以使视图与模型分离开解耦合。 其控制器创建模型; 控制器创建⼀个或多个视图,并将它们与模型相关联; 控制器负责改变模型的状态; 当模型的状态发⽣改变时,模 型会通知与之相关的视图进⾏更新。 ⼆、项⽬视图 ⼆、项⽬视图 1、分解视图 、分解视图 分解是构建软件架构模型的关键步骤,分解视图也是描述软件架构模型的关键视图,⼀般分解视图呈现为较为明晰的分解结构特点。 2、依赖视图 、依赖视图 依赖视图展现了软件模块之间的依赖关系。⽐如⼀个软件模块A调⽤了另⼀个软件模块B,那么我们说软件模块A直接依赖软件模块B。如果 ⼀个软件模块依赖另⼀个软件模块产⽣的数据,那么这两个软件模块也具有⼀定的依赖关系。 3、执⾏视图 、执⾏视图 执⾏视图展⽰了系统运⾏时的时序结构特点,⽐如流程图、时序图等。执⾏视图的每⼀个执⾏实体,⼀般称为组件(Component),都是 不同于其他组件的执⾏实体。如果有相同或相似的执⾏实体那么就把它们合并成⼀个。 执⾏实体可以最终分解到软件的基本元素和软件的基 本结构,因⽽与软件代码具有⽐较直接的映射关系。在设计与实现过程,我们⼀般将执⾏视图转换为伪代码之后,再进⼀步转换为实现代 码 3.1 顾客 3.2 员⼯ 3.3 管理员 4、实现视图 、实现视图 实现视图是描述软件架构与源⽂件之间的映射关系。⽐如软件架构的静态结构以包图或设计类图的⽅式来描述,但是这些包和类都是在哪些 ⽬录的哪些源⽂件具体实现的呢?⼀般我们通过⽬录和源⽂件的命名来对应软件架构的包、类等静态结构单元,这样典型的实现视图就 可以由软件项⽬的源⽂件⽬录树来呈现。 实现视图有助于码农在海量源代码⽂件找到具体的某个软件单元的实现。实现视图与软件架构的静态结构之间映射关系越是对应的⼀致性 ⾼,越有利于软件的维护,因此实现视图是⼀种⾮常关键的架构视图。 src       源代码⽬录 -main     存放实现类的源代码 --bean       model类 --controller        控制器类 --dao       持久层--service       实现业务功能服务 --util       ⼯具类 -test     测试类 三、系统运⾏环境 三、系统运⾏环境 操作系统:Windows 10 开发语⾔:Java 开发⼯具:IntelliJ IDEA 前端框架:Vue 后端框架:Spring + SpringMVC + Mybatis 数据库: MySQL 技术选型说明:Spring的IOC特性,将对象之间的依赖关系交给了Spring控制,⽅便解耦,简化了开发。其AOP特性,对重复模块进⾏集 ,实现事务,⽇志,权限的控制;SpringMVC是使⽤了MVC设计思想的轻量级web框架,对web层进⾏解耦,与Spring⽆缝衔接,有着灵 活的数据验证,格式化,数据绑定机制;Mybatis数据库的操作(sql)采⽤xml⽂件配置,解除了sql和代码的耦合提供映射标签,⽀持对象和 和数据库orm字段关系的映射,⽀持对象关系映射标签,⽀持对象关系的组建。 四、数据库设计 四、数据库设计 本项⽬⽬前共有4张数据库表 1.顾客表 字段名 类型 长度 是否可为空 customer_id int 10 N name varchar 20 N statement varchar 50 Y password varchar 20 N 2.普通员⼯表 字段名 类型 长度 是否可为空 worker_id int 10 N name varchar 20 N statement varchar 50 Y password varchar 20 N 3.书籍表 字段名 类型 长度 是否可为空 book_id int 10 N name varchar 20 N statement varchar 50 Y price int 10 N 4.订单表 字段名 类型 长度 是否可为空 order_id int 10 N name varchar 20 N statement varchar 50 Y belong Customer 20 Y 五、系统概念原

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值