设计模式
文章平均质量分 63
jeff-y
所有文章用于个人记录,仅供参考,有错误的地方还请指出错误。
展开
-
工程师必须知道的几个原则
DRY 原则逻辑重复校验密码和校验账号的两个函数有重复的逻辑。也就是有重复的逻辑,但是也不是重复的代码功能语义重复什么是功能语义,语句表达的意义。 实现一个检验IP合法性的。一个使用的是正则进行校验的,一个是通过hard code进行校验。这就是代码逻辑不同,但是语义是相同的代码执行重复执行了多次语义相同的逻辑代码。比如我们在在校验用户的登录信息是否正确的时候,先校验他的基本信息是否存在,再校验是否正确。但是我们在校验是否正确的时候已经 校验了是否存在了。所以不用重复了。代码的可复用性当有原创 2021-06-25 09:24:48 · 435 阅读 · 0 评论 -
如何使用MySQL关系型数据库存储树结构
背景需求存储一个组织结构或者档案仓库,看到这个需求我们的第一个反应肯定就是树状结构,并且是一个多层多节点无限级树状机构。我们目前使用的是mysql关系型数据库。那我们应该如何来实现这个结构关系呢?有3种存储的方式:到目前为止我在实战中曾使用过三种方式来实现这种hierarchical-data:Adjacency list (邻接表)Closure table (闭包表)Path enumeration (路径枚举)基于个人需要这里主要了解闭包表。Closure table原创 2020-12-13 18:37:27 · 877 阅读 · 0 评论 -
设计系统的步骤(方法论)
系统设计过程把所有需要的东西聚集在一起,审视问题。不停的提问,以至于我们可以明确使用场景和约束。讨论假设。(这也就是需求分析其中的一步)用户数量根据用户数量所谓依据之一推断QPS,TPS再着根据TPS,QPS对机器的选型也是对业务架构的设计的依据之一,是否需要限流等。使用方式他们会怎样使用它?是通过移动端还是通过web页面呢?还是通过APP,或者小程序呢?以及用户的使用APP的习惯,用户使用人群选择正确的UI界面。大概率的符合用户的审美。系统的作用根据系统的作用,选择原创 2020-12-05 22:11:43 · 5137 阅读 · 1 评论 -
DDD(领域驱动设计),你必须知道的贫血模型和充血模型
背景最近公司开始推行DDD(领域驱动设计),基于充血模型的面向对象开发模式是DDD的特点之一,而在平时开发中我们都使用的是MVC 架构是基于贫血模型的面向过程开发风格,也许有同学就会问了,贫血模型和充血模型是的什么呢?贫血模型和充血模型简介贫血模型:定义对象的简单的属性值,没有业务逻辑上的方法(个人理解)没有找到官方解释充血模型充血模型也就是我们在定义属性的同时也会定义方法,我们的属性是可以通过某些方式直接得到属性值,那我们也就可以在对象中嵌入方法直接创建出一个具有属性值的对象。也就原创 2020-10-18 15:53:29 · 6008 阅读 · 4 评论 -
程序員必須知道的面向对象设计六大原则
背景在程序设计领域, SOLID(单一功能、开闭原则、里氏替换、接口隔离以及依赖反转)是由罗伯特·C·马丁在21世纪早期 引入的记忆术首字母缩略字,指代了面向对象编程和面向对象设计的五个基本原则。当这些原则被一起应用时,它们使得一个程序员开发一个容易进行软件维护和扩展的系统变得更加可能。SOLID所包含的原则是通过引发编程者进行软件源代码的代码重构进行软件的代码异味清扫,从而使得软件清晰可读以及可扩展时可以应用的指南。SOLID被典型的应用在测试驱动开发上,并且是敏捷开发以及自适应软件开发的基本原则的原创 2020-07-29 19:43:55 · 270 阅读 · 0 评论 -
【设计模式】变化和不变化的代码进行分离day01
设计原则找出应用中可能需要的变化之处,把他们独立出来(封装),不要和哪些不需要变化的代码混在一起实际举例我们实现一个鸭子,且这个鸭子有很多种,且有各个属性。我们应该如何设计这个鸭子呢?首先鸭子不变的属性有哪些? 外观,游泳。等(先定义这两个)鸭子变的属性有哪些? 有的会叫,有的会飞等那我们怎么去定义 红鸭子,黑鸭子,还有玩具鸭子?show me code由于鸭子都会游泳和有外观,那么我们创建一个最基础的鸭子package 设计模式;/** * @author yuanxin原创 2020-07-04 01:36:17 · 539 阅读 · 0 评论 -
final关键字你真的会用?
背景codeReview的时候,看到各种final关键字的”骚“操作,今天认真复习一下final关键字。我们都知道final关键字可以使用到类上,也可以使用道方法上,也可以使用到数据上,但是他的使用会为我们提供哪些好处呢?final关键自的使用Java关键字final通常指的是“这是无法改变的”不想作出改变的原因有两种:设计和效率。由于一般使用这一方面对final不是很了解(例如我)导致使用目的不是很明确。导致使用错误。而达到反效果。final可以修饰数据,方法,和类final数据被final原创 2020-05-26 01:03:07 · 382 阅读 · 0 评论 -
中流砥柱java的动态代理
背景在我们学习Spring框架的时候我们是否思考过,Spring是如何实现bean实列注入到IOC容器中呢?我们如何去权威指南代理是基本的设计模式之一,他是为了提供额外的或不同的操作,而插入的用来代替“实际”对象的对象。这些操作通常涉及与“实际”对象的通信,因此代理通常充当着中间人的角色。Java的动态代理比代理的思想更迈进了一步,因为他可以动态地创建代理并动态的处理对所代理的方法的调用。在动态代理上所做的所有调用都会被重定向到单一的调用处理器上,他的工作是揭示调用的类型并确定相应的对策。原创 2020-05-15 01:59:49 · 226 阅读 · 1 评论 -
设计模式之幂等性
什么是幂等性HTTP/1.1中对幂等性的定义是:一次和多次请求某一个资源对于资源本身应该具有同样的结果(网络超时等问题除外)。也就是说,其任意多次执行对资源本身所产生的影响均与一次执行的影响相同。Methods can also have the property of “idempotence” in that (aside from error or expiration issues) ...原创 2019-09-07 18:57:16 · 435 阅读 · 0 评论 -
设计模式之装饰者模式
什么是装饰模式?对需要增加附加功能的对象进行在不修改继承,不需要修改类的情况下进行增加,这就是装饰模式,(1) 装饰对象和真实对象有相同的接口。这样客户端对象就能以和真实对象相同的方式和装饰对象交互。(2) 装饰对象包含一个真实对象的引用(reference)(3) 装饰对象接受所有来自客户端的请求。它把这些请求转发给真实的对象。(4) 装饰对象可以在转发这些请求以前或以后增加一些附加功...原创 2019-08-10 23:50:31 · 135 阅读 · 0 评论