详细设计-静态模型设计|学习笔记

简介: 快速学习详细设计-静态模型设计

开发者学堂课程【高校精品课-厦门大学 -JavaEE 平台技术详细设计-静态模型设计学习笔记,与课程紧密联系,让用户快速学习知识

课程地址:https://developer.aliyun.com/learning/course/80/detail/15937


详细设计-静态模型设计


内容介绍:

一、分层结构及其主要职责

二、 dao 层

三、创建对象的步骤


一、分层结构及其主要职责

首先,回顾复习分层结构,后面做三层, service 层、 dao 层和 mapper 层。

大家首先要明确这三层的职责是什么,即只有明确每一层的职责,才会具体明确每

一层的对象是什么。

mapper 层之前已经讨论过,结果是对象模型的构建应该在 dao 层完成, mapper 层只应该做单表的操作,如此, mapper 层就变成了增删改查。所以 mapper 层的主要讨论结果是主要、自动生成。增删改查的代码其实没有太大的意义,除非有特殊的要求大家使用自动生成的代码来完成单表的增删改查。

不管使用何种工具,这一部分的主要思想是用代码生成。 dao 层主要是把对象模型构建出来,即在 dao 层中将模型构建在内存中,在模型上计算用户的权限值;所以用户的权限有多少首先要看它有多少角色,角色有多少权限,把它们累积起来才是用户有多少权限。如果说按照标准的做法,即构建出对象模型;其实并没有将对象模型构建完成,但是仍然用到了对象模型的思想和概念。

在例子中, service 没有做什么,因为把 dao 层的模型放出以后 service 层的作用是在模型上计算权限值,之后将权限值放到 Redis 中。这是经典做法的结构, dao 层负责对象, service 层负责在对象中做业务的驱动、计算,得到结构,返回给上一层的控制系统。大家的设计可以看到和标准做法略微有些差异,虽然在做之前明确每一层的职责,但是在做的过程中间又会有一些小的背离,而大的方向是确定的。

如果说各自的系统模块中,其实可以看到在 API 上已经给大家标出,应该完成多个服务,即每一块是一个独立的微服务。大家会认为在做任何一个功能时,单个服务是不足以完成相应功能的,比如订单,一定会用到商品,而商品是在另外的一个服务中,那么商品的服务是按照分工的 service 层调用,即在 dao 层中只负责订单的对象模型的构建;但是会用到 service 层商品的对象模型,即需要用自己的 service 层调用别人的ctrl 层(不是 service 层);

一般而言,是在 service 层调用,不会在 dao 层调用的; dao 层只是负责自己模块中对象模型的构建。对于这个例子来讲,因为权限系统是最基础、最基本的模块,不会调用其他任何得模块,只会被其他的模块调用。但是对于大家而言是有问题的,因为你们需要去相互调用模块。列出 ER 图,知道 mapper 的表是自动生成的,即不管使用何种工具,可以看到三个对象、四种关系,包括 login ;一共是8张表,就会生成8个 mapper ;之后8个 mapper 分别对对应的表进行增删改查的操作。因为大家都对增删改理解;而查,是根据工具不同,比如 best generate ,它是用 example 的对象,因为可以封装非常复杂的场景条件与获得的,去查找该对象。

 

二、 dao 层

对于 dao 层的包装而言,其实没有必要每一个表做一个 dao 层对象; dao 层对象封装的主要想法是针对实体对象做 dao 而不是针对关系对象做 dao 。

有8个 mapper ,只有4个 dao ,因为没有写 login 的 dao ,所以就只剩3个 dao ,所以就只有 UserDao 、 RoleDao 以及 PrivDao 。每一个 dao 层中间要有自己的 mapper ,关于 user 表的 mapper 肯定是在 UserDao 中访问的,叫做 um ;关于用户和角色类表的 mapper ,也是在 UserDao 中访问的,是用户和角色的关系,即一个多对多的关系; user 中有 RdeDao 、 RoleMapper 和 RolePrivilegoMapper 。在三个分层中设计的对象是如下图所示的结构。

但是,目前还没有设计 service 层的对象,因为现在的主要目的是为了在数据库中,将对象模型捞出。所以,如果是自动生成,7张表就会有7个对应的 mapper ,每一个 mapper 对应的都是单张表的增删改查。这里使用 dao 层的设计, dao 层的目的就是为了把对象模型构建出来,所以,大家可以看到 dao 层的作用就是使用 grasp 中创建者的方法,让 dao 层去创建对象,这里的创建对象并不是指传统的面向对象设计的中随便取出一个对象,而是利用 MyBatis 的框架,从数据库查找出一个对象,即不是创建一个对象,而是查找出一个对象,让其从数据库中的一条记录变为在内存中的一个对象。

而 dao 层的作用不仅仅是把对象创建出来,而且把对象的关联也全部进行创建。也就是大家可以看到的每一个 dao 层负责的 mapper 是不一样的。

 

三、创建对象的步骤

比如整个权限系统不做一个 dao 层对象,而做成三个 dao 层对象,是希望把创建的过程进行分离,分离的原则就是创建者模式。最小的是 PrivDao ,因为它的整个对象模式是在最尾巴上做的,那么它只是负责通过 PrivilegeMapper 去创建 Privilege 对象。其次, RoleDao 要创建 Role 的对象,还需要创建 Role 中所有的 Privilege 的对象,但是它不是自己去创建的,它只是调用了 PrivDao 去创建 Privilege 对象。至于要创建何种的 Privilege 对象靠的是 RolePrivilegeMapper 中查出的该 Role 中有多少的  Privilege ,之后让 PrivDao 去创建 PrivDao 对象,然后将其关联到 Role 上。

同理, user 也是一样的, user 使用 UserMapper 创建了对象,之后在 UserRoleMapper 中查看 user 中有多少 Role ,之后让  RoleDao 去创建 Role 的对象,然后将它们关联起来。可以看到这样的设计,虽然没有 new 函数,但是它的思想是 grasp 原则中的创建者思想,把从 MyBatis 中查对象的动作认为是创建对象,然后按照创建这的思想给它分到了多个 dao 区。所以,面向对象的设计思想一定要结合具体的技术框架去使用;比如,在课本上看到的面向对象创建者的东西是 new ,在 new Role 时,由 Role 去负责 new Privilege ,这是书本上的东西。

但是,放在 MyBatis 中它就不是 new ,而是用 MyBatis 去查阅对象;在查的过程中并不是用对象去查对象,而是靠 dao 的对象去调用 mapper 的对象。因为 dao 的对象就是为了构建对象,所以,认为 dao 的对象的作用就是构建对象;使用 grasp 中的创建者模式把 dao 分为三个,并将它们相互关联。课本上,大富豪的例子是没有意义的,因为现在基本上不会做一个纯的在内存中间存在的对象的系统;数据量非常巨大的东西一定是在数据库中或者别的环境中。所以像在课本中间,纯在内存中搞出一大堆对象去使用的情况基本上是没有的,但是,这些思想都是可以使用的。

比如,在特定的 MyBatis 技术架构当中,使用了 grasp 中的创建者思想,把创建的内存中的对象以及之间的关联分到三个 dao 中。

相关文章
|
5月前
|
前端开发 算法 芯片
后道设计
后道设计
35 1
|
5月前
|
XML JSON 算法
【软件设计师备考 专题 】编写内部设计文档:构件划分图和接口
【软件设计师备考 专题 】编写内部设计文档:构件划分图和接口
86 0
|
12月前
|
数据可视化 数据处理
结构化分析与设计
一、结构化分析与设计 结构化分析与设计(Structured Analysis and Design,简称SAD)是一种软件开发方法论,旨在通过分析和设计来构建高质量的软件系统。 结构化分析与设计的主要特点包括以下几点: 1. 结构化分析:结构化分析是通过对系统需求进行分析,将系统分解为若干个功能模块,并定义它们之间的关系和交互。在结构化分析中,常用的工具和技术包括数据流图(Data Flow Diagram,简称DFD)、数据字典(Data Dictionary)和实体关系图(Entity-Relationship Diagram,简称ERD)等。 2. 结构化设计:结构化设计是在结构化分析
609 2
|
5月前
|
存储 算法 安全
软件系统设计步骤与原理
软件系统设计步骤与原理
|
5月前
|
存储 SQL 前端开发
分类目录功能模型设计
分类目录功能模型设计
|
设计模式 架构师 Java
聊聊简单设计
聊聊简单设计
122 0
|
算法 BI
贪心策略设计并解决会场安排问题
贪心策略设计并解决会场安排问题
311 3
贪心策略设计并解决会场安排问题
|
存储 缓存 算法
详细设计-动态模型设计|学习笔记
快速学习详细设计-动态模型设计
117 0
|
存储 消息中间件 算法
服务设计要解决的问题
 前几天和同事聊天,同事说:   “业务的服务(相对于我们基础架构这边的底层技术)在技术上就需要解决三个问题:分布式、通信和存储。”   我回忆之前做业务的时光,觉得确实,再加上一个“服务治理”就差不多了。想想“服务设计要解决的问题”这个话题可以把之前静儿写的很多文章做一个归纳概括。今天做一个总结。
服务设计要解决的问题