开发者学堂课程【高校精品课-厦门大学 -JavaEE 平台技术:详细设计-设计讨论】学习笔记,与课程紧密联系,让用户快速学习知识
课程地址:https://developer.aliyun.com/learning/course/80/detail/15973
详细设计-设计讨论
1、用第二个原则,创建者原则,现在的设计用的是信息专家的原则,从技术上可以把所有代码全部写在这,让 user查 loop,最后返回在 user 算,技术上是没有问题,代码主要分布在三个地方,分布在三个地方是原则问题,用的就是信息专家的原则,做一件事情谁具备完成事情的信息就应该在这里,算 bits 代码要在privde pom 里面,市面上极少有在 po上面写代码,po 是传数据的东西而已,按照对象的原则,有一个原则跟框架无关,因为不能破坏 po本身的特性,po 是一个跟平台无关的对象,它不依赖于任何框架,不能破坏,破坏之后 po就不对,不破坏 po的原则,不依赖于框架。方法不依赖于框架,根据 po的属性,算出来它的权限,只依赖于 java。
2、方法放在 privillagedao中,它跟 privillagemapper有关,可以把所有的mapper 放在 user中,dao 不要,分原则就是希望代码不要集中在一个对象中,而是按照信息专家的原则,谁具备完成这个东西所需要的信息就由谁来完成,所以用的是第二个原则,信息专家原则,最终的结果就是高类聚低耦合,分成了三个dao,每个dao要干什么,非常清楚,代码在 dao里面有类聚性,如果放到一个对
象里面没有耦合,高类聚低耦合是一对矛盾。
假如都不要 dao,没有耦合,在类聚性和耦合性的基础上进行折中,增加两个 dao的对象,把代码按照信息专家原则分下去以后,会使得代码的类聚性比较高,假如在登录的时候第一次要读数据库,没有用过系统,上来什么都没有,都是要读数据库,有用户抱怨因为都是在权限管理系统,都上班,早上八点钟上班,一起登录,每个人都不愿意早来或者晚来,正好在八点那一刻全登陆,然后就发现早上登陆时候特别慢,因为是后台的管理系统,大家在同一个时间上班,所以大家都在同一个时间登陆,大家下午六点钟下班,内存不会存两天,存两天没意义,内存存在晚上十点,盖掉即可。
第二天登陆比较慢,谷歌的名言是做系统要用最便宜的机器,最精巧的办法,做最好的系统,登陆之后要做功能,一定会用到权限,但是因为是后台系统,都在同一时间登陆,在那个时间登陆非常慢,设计的目的就是为了提速,关键是把dao分开,role dao user dao privillage dao 三个的特征是重用性越来越大,不管有多少用户上来,角色一定会重用的。
比如有一万个用户,只有100个或者两百个角色,不管有多少个角色,它的权限的个数一定是重用的,整个系统做好以后就只有300权限或者400个权限,500个权限,意味着可以把它放到缓存里,当第一个用户过来在 user dao 中缓存找是否有privillage pom,有就不去数据库里面抄,直接从缓存中把 privillage pom拿出来,这是第一个地方可以加缓存,缓存中如果有 row,直接拿出来,不坐后面所有的动作,roe 和 privillage会高度重用,意味着后面的用户越登陆越快,上来之后只需要查自己的关系即可,每一个用户的角色不一样,关系变化,两部分缓存非常有意义,如果把 row全限制和 privillag全限制缓存在内存中,所有的用户上来之后,后面的用户会越来越快,后面的用户要做的事情是去查到底有什么样的角色,算角
色的东西即可,层级是一个循环套着一个循环,如果后面不做,提速非常明显。
3、提速的原因是把 dao分开,提速对于外面的 user dao完全无感,当数据从缓存里拿,还是从数据库里查的时候,在 user dao是完全感觉不到它存在的。
所以在设计上面分开的原因是预估到它有可能要提速,可以在另外两个 dao增加代码,不修改方法接口的表现,所以外面不会发生改变,分配所达成的效果是数据的封装性会比较好,改变裂变的逻辑就不会影响外面的东西,面向对象的设计,其实
封装性是一个最简单的,最容易达成的一个特性,特性会产生非常有效的效果。
面向对象中间的信息专家的原则,包括创建者的原则是最基本的原则,但也是最有用的原则,代码中间90%的情况下都在考虑这两个最基本的原则,所谓的更高深的原则,能用的场合不多,它会在一些很特定的场合能用,觉得很精巧,很精妙,但是其实有很多的脏活和累活得依靠这两个原则做,所以每一行代码在写的时候都要
考虑这个原则。