对象状态分析|学习笔记

简介: 快速学习对象状态分析

开发者学堂课程【高校精品课-厦门大学 -JavaEE 平台技术对象状态分析学习笔记,与课程紧密联系,让用户快速学习知识

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


对象状态分析


首先要来讨论的第一个问题就是对象的状态在权限管理系统中间哪些东西是有状态的这个应该毫无疑问,用户是有状态的。除了用户以外,还有什么东西是有状态的?这里总共三个东西就是用户角色和权限还有个日志。其东西其实都是这几个东西之间的关系一般关系是没有状态的只有实体的东西才有状态。

除了用户以外,还有东西有状态吗?角色为什么要有状态?学术没有逻辑可以删除,角色也直接删除,因为删掉角色只会减少的权限没什么太大问题,从安全性的角度来说,只怕别人增加权限不怕别人减少权限这个东西可能会有状态,关系是没状态的用户代理是一个很特殊的东西,它是表示用户和用户之间的代

理关系。在这里有两个时间,一个是开始时间,一个是过期时间也就是状态的代理关系,用户的代理关系在什么时间之内是有效的

当一个用户需要权限时,其实是要去读它的代理关系代理的用户有权限,它决定有没有权限这两个字段可能会存在着一些问题,因为后面会说到较权限是在这个系统中间非常高频的动作每一个操作都是需要权限的。在这个部分来说,

通过两个时间在数据库里去比较它的权限去比较它有效的代理关系可能会是个瓶颈。要看后续的设计是什么样的。

如果这个部分是瓶颈那就会考虑给它加一个状态当它进入到有效期以后,状态标识成为这个代理是有效的,它没有进入到有效期之前就是它等待的这个这个状态过了以后就是过期的无效的状态。如果有个状态要去拿到当前有效的代理关系就变得比较简单了,就不需要通过两个字段去做判断只要拉到 state 就能把它查出来。这是有可能会有状态的对象。

但是之所以不是很确定因为后面的设计还没有做。要看这样的一个部分是不是瓶颈。就是要通过两个时间去拿到当前有效的代理关系,这个事情是不是瓶颈

果它是瓶颈也许会个状态让它出来比较简单一点减少它的瓶颈。如果它不是瓶颈就不用去管这个事情。

因为还没有做瓶颈分析,所以先不用户代理状态。只有这个用户是状态才可以,所以用户有些什么样的状态?刚才已经写了三个状态。一个是可以正常登录的一个状态另外一是不让它登录的一个状态第三个是废弃。之前已经把它逻辑删除给去掉了,再给这个用户加了一个废弃状态。废弃就相当于删除它永远不用。但是这

个用户的所有的信息还在里,因为这个用户发的评论,做的所有事情还能查到只是说它永远不能再用了这是三个状态

除此之外还有没有状态?在设计对象状态时要去发现状态,再来说状态的迁移关系。这里应该加一个叫做新用户的状态什么新用户的状态?因为这是后台的权限管理系统不像前端的电子商城,谁注册一个用户谁就可以用。如果谁都能注册

用户能进来使用,那么肯定是有问题的所以要定义一个新的状态叫做新用户。

就是任何一个用户注册了一个用户,告诉自己是哪个商铺的或者告诉自己是平台。不是说自己是平台就是平台,说自己是商铺就是商铺,这是需要审核的平台的由平台管理员来审商铺的由商铺的管理员来审来自商铺里有权限因为不知道权限怎么定义的,商铺里有权限人审这个用户是否能登陆进来首先说能

登陆进来再说它有没有权限,如果它不能登进来就不要谈的权限了所以要加一个新用户的状态这是四个状态

还要不要别的状态?就先有四个状态。四个状态中间,首先要想哪一个是初始状态什么叫初始状态,就是当一个用户刚刚出现时新建一个用户时,它是什么状态是哪个状态,是新用户状态这个应该是很明显的。所以要画一个初始的状态的符号指向这个状态,说它是个新状态。而且上面还要写一个动作,这个动作表

什么情况下它会出现一个新用户状态的用户,是什么动作?

注册这个注册其实是在界面上的一个 api当然在这里为了清晰写的是中文如果传统的设计是一个方法,可以直接写方法名,这样也比较清晰。因为是api注册出来是一个很长的东西写上不方便的,所以再另外一张表

就在周三的讨论课时,在做这个状态的动作的时候,做一张表所注册的这个动作是哪一个 api去把它描述出来,但图上就写这个注册就可以了。所以注册这样的一

个动作会产生一个新用户状态的用户

如果一个新用户要变成正常的用户是需要经过一个审核的过程,就是由平台管理员来审核。平台管理员可以审登记为平台用户的这些新用户店铺管理员去审核店铺的这些新用户,其实就像 super id技术就是每个用户有的 super id,也就是department id ,是用 department id去比较的。每个人只能自己 Department

id 是相同的用户,就是自己自己的

但这里会有个问题当一个新店铺出来时第一个用户谁来审?还是平台管理员来审,所以还是要做特殊的处理。平台管理员可以所有的店铺管理员只能本店

铺的,做这样的一个设。审核既然有审核就有同意和不同意,如果不同意怎么办?

首先确定一下新用户是不能登录的它要到正常用户才可以登进这个系统所以新用户是不能登录的首先如果审核不过,让它禁止是没有意义的如果废弃好像太极端了,那么用户能不能改一改可能说他的名字取得不合理或者就觉得不爽不想

让他过过两天才让他通过。

所以如果审核不过让他留在这个新的用户,其实没有任何动作它只有一个动作就是审核通过,所以审核的底下要加一个条件叫做 ok或叫成功。不是审核这个动作就必然使新用户转移到正常的用户,而是审核他的条件是 ok条件的前面要加方

括号表示下面这个是条件

一般来说把动作写到线上条件写在线下表示在这个动作下的这个条件下用户的状态从新用户的状态转移到了正常的状态。新用户的状态还能去其他状态吗?应

该不行,因为禁止它没有意义,也不让它废弃,所以它只有一个状态迁移线。

从正常态的这个用户来说它是可以被禁止的所以管理员想进谁就进谁所以说禁止,这也是一个api,就可以禁止掉一个用户到它的静止态就是不能登录的它就是不能登录的一个状态,但是它还能够改自己的信息他不能登录应该也不能改自

己的信息。

如果他不能登录就什么都不能干了,自己的信息自己的东西都不可以看这是静止态。

在静止态时,如果觉得他 ok了再把它捞回来,这叫做恢复写到线上使得他重新变成了正常态静止态这多提一下,一般来说都是管理员去禁止一个用户但是如果把这个系统做的足够的好一点就是发现有一个用户在一分钟之内访问了十次

api那意味着什么呢?因为他不是个人就要禁止它,所以这时发出静止动作的不是这个管理员而是系统。

但是这个系统肯定要有一个身份来发,所有的动作都是要有一个身份来发的系统虽然不是人,也是个有身份的东西所以这个禁止不仅管理员可以做系统也可以做

而且做完以后是要有一个日志的到底是管理员禁止它还是系统禁止它所以把

系统也想成是个人就好就像这个禁止工作,其实系统也可以做,但是系统也想象成是个人就好了。这是静止到正常态的一个转变。

那废弃就这个用户永远不要,他也别想再登陆了。但是保留它这个东西相当逻辑删除。逻辑是从上述的三个状态都可以到废所以如果要写就是画三条线当然也可以另外一种画法,这里用另外一种画法。定义一个大的状态已经用正常

多点词汇这个大的状态叫做常用用户,就是他还能用到这个当用的用户的状态,这是可以用的。不要常用的,叫当用的。因为这些用户状态都能够让它可以恢复到可以登录的状态但是废弃是不行的。

所以在这三个状态下只做了一个动作,这个动作叫做废弃不要这个用户

就进入到了废弃的状态。可以看到废弃的状态是唯一没有出现的状态。新用户正常,禁止可以看到有一个动作能使得离开这个状态。

但是废弃这个状态是没有任何动作能让离开这个状态,所以这个状态整个系统

的中终止态。画一下,终止需要有个符号来表示出来这就表示这是整个系统的终止态。那这就是权限系统中间的用户的状态分析状态图。

分析出来系统中间到底有些什么样的状态,再看它新建这个对象时它的状态是什

,什么是它的初始态,最后这个这个对象的终止的状态是什么?到这个状态以后这个对象就不会再发生任何的改变。

这些所有的状态的迁移一般都是 api就是之前设计的 api有人去操作的动作造成了状态的迁移个别情况会是系统做的动作。系统做的动作有可能会通过api

可能不会通过 api

比如像禁止这个动作就没必要让系统通过api再走一趟可能就让系统直接调服务层的这个代码让它禁止不要再通过外面的api过来。所以所有的状态的迁移一般都

是 api除了系统内部的动作造成的状态迁移就是用户的状态

相关文章
|
2天前
new 一个对象的过程中发生了什么
new 一个对象的过程中发生了什么
12 2
|
2天前
|
设计模式
二十三种设计模式全面解析-当你的对象需要知道其他对象的状态变化时,观察者模式是你的救星!
二十三种设计模式全面解析-当你的对象需要知道其他对象的状态变化时,观察者模式是你的救星!
|
8月前
|
Java 调度
谈谈你对Java线程5种状态流转原理的理解?
今天,有位工作5年的小伙伴被问到这样一道面试题,说谈谈你对Java线程5种状态流转原理的理解。当时,平时只关注过线程如何定义和使用,对于线程状态流转脑海一片空白,完全懵了。于是找到我,希望我拍一期视频。 今天,我给大家分享一下我的理解。
75 0
谈谈你对Java线程5种状态流转原理的理解?
|
算法 Java 编译器
如何理解对象赋值给接口的操作(关键在对象!)
如何理解对象赋值给接口的操作(关键在对象!)
如何理解对象赋值给接口的操作(关键在对象!)
|
关系型数据库 MySQL 编译器
隐式转换的时机和机制|学习笔记
快速学习隐式转换的时机和机制。
58 0
|
开发者 索引 Python
对象操作1|学习笔记
快速学习对象操作1
45 0
|
开发者 索引 Python
对象操作2|学习笔记
快速学习对象操作2
52 0
对象操作2|学习笔记
|
前端开发
引出生命周期
引出生命周期
57 0
|
存储 安全 Java
Java并发编程 - 有状态 & 无状态的对象区别
Java并发编程 - 有状态 & 无状态的对象区别
570 0
|
存储 算法 Java
Java线程创建过程中的各种细节
哈喽,我是子牙。十余年技术生涯,一路披荆斩棘从技术小白到技术总监到JVM专家到创业。技术栈如汇编、C语言、C++、Windows内核、Linux内核。特别喜欢研究虚拟机底层实现,对JVM有深入研究。分享的文章偏硬核,很硬的那种。
199 0
Java线程创建过程中的各种细节