随笔分类 - 设计模式
1
摘要:4.2 快速改善代码质量的编程规范 4.2.1 命名 命名的一个原则就是以能准确达意为目标 4.2.1.1 多长合适 作用域大的用更达意的长命名,如类名;反之用短命名 4.2.1.2 利用上下文 如下代码:不应在成员变量的命名中重复添加“user”这样一个前缀单词,而应直接命名为 name、pass
阅读全文
摘要:4.1 通过重构增强代码可测试性实战 代码可测试性: 针对代码编写单元测试的难易程度。对于一段代码,如果很难为其编写单元测试,或者单元测试写起来很费劲,需要依靠单元测试框架中很高级的特性,那往往就意味着代码设计得不够合理,代码的可测试性不好 4.1.1 需求 Transaction 是经过我抽象简化
阅读全文
摘要:3.12 实战二:如何实现一个支持各种统计规则的性能计数器? 3.12.1 划分职责进而识别出有哪些类 根据需求描述,先大致识别出下面几个接口或类。这一步不难,完全就是翻译需求。 MetricsCollector 类负责提供 API,来采集接口请求的原始数据。我们可以为 MetricsCollect
阅读全文
摘要:3.11 针对非业务的通过框架开发,如何做需求分析和设计? 3.11.1 需求分析 对于非业务通用框架的开发,做需求分析的时候,除了功能性需求分析之外,还需要考虑框架的非功能性需求。 易用性 性能 扩展性 容错性 通用性 3.11.1.1 项目实例 设计开发一个小的框架,能够获取接口调用的各种统计信
阅读全文
摘要:3.10 实战一:如何开发实现一个遵从设计原则的积分兑换系统? 3.10.1业务开发包含的工作 无外乎三方面的工作要做: 接口设计、数据库设计和业务模型设计 。 数据库和接口的设计非常重要,一旦设计好并投入使用之后,这两部分都不能轻易改动。 改动数据库表结构,需要涉及数据的迁移和适配; 改动接口,需
阅读全文
摘要:3.9 实战一:业务系统开发,如何做需求分析和设计 3.9.1 需求分析(积分系统) 借鉴类似产品 技术人也要有产品思维 要懂得借鉴:爱因斯坦:“创造的一大秘诀是要懂得如何隐藏你的来源” 两大功能:赚取积分;消费积分 赚取积分 积分赚取渠道,比如下订单、每日签到、评论等; 积分兑换规则,比如订单金额
阅读全文
摘要:3.8 迪米特法则 3.8.1 何为高内聚、低耦合 高内聚: 相近的功能应该放到同一个类中,不相近的功能不要放到同一个类中。相近的功能往往会被同时修改,放到同一个类中,修改会比较集中,代码容易维护。 低耦合: 类与类之间的依赖关系简单清晰。即使两个类有依赖关系,一个类的代码改动不会或者很少导致依赖类
阅读全文
摘要:3.7 DRY原则 3.7.1 DRY 原则(Don’t Repeat Yourself) 三种代码重复的情况:实现逻辑重复、功能语义重复、代码执行重复。 实现逻辑重复,但功能语义不重复的代码,并不违反 DRY 原则。 实现逻辑不重复,但功能语义重复的代码,也算是违反 DRY 原则。 除此之外,代码
阅读全文
摘要:常用设计模式 观察者模式 利用spring的自定义事件和自定义监听器实现 创建订单 定义事件 发微信监听器 发短信监听器 策略模式 不同级别用户的费用计算 spring的特性:构造函数将接口的列表作为参数,spring会自动添加其所有实现
阅读全文
摘要:3.6 KISS原则 3.6.1 如何理解KISS原则? KISS 原则的英文描述有好几个版本: Keep It Simple and Stupid. Keep It Short and Simple. Keep It Simple and Straightforward. 意思其实差不多,翻译成中
阅读全文
摘要:3.5 依赖反转原则 3.5.1 控制反转(IOC) Inversion Of Control,缩写为 IOC 把这个简化版本的测试框架引入到工程中之后,只需要在框架预留的扩展点,也就是 TestCase 类中的 doTest() 抽象函数中,填充具体的测试代码就可以实现之前的功能了,完全不需要写负
阅读全文
摘要:3.4 接口隔离原则 3.4.1 如何理解“接口隔离原则”? 英文翻译是“ Interface Segregation Principle”,缩写为 ISP。 Robert Martin 在 SOLID 原则中是这样定义它的:“Clients should not be forced to depe
阅读全文
摘要:3.3 里氏替换原则 3.3.1 如何理解“里式替换原则”? 英文翻译:Liskov Substitution Principle,简写为LSP 子类对象(object of subtype/derived class)能够替换程序(program)中父类对象(object of base/pare
阅读全文
摘要:3.2 开闭原则 3.2.1 对扩展开放、对修改关闭 详细表述 在已有代码基础上扩展代码(新增模块、类、方法等),而非修改已有代码(修改模块、类、方法等)。 实例 API 接口监控告警的代码。 其中,AlertRule 存储告警规则,可以自由设置。 Notification 是告警通知类,支持邮件、
阅读全文
摘要:3.1单一职责 3.1.1 如何理解单一职责原则(SRP)? 一个类只负责完成一个职责或者功能。不要设计大而全的类,要设计粒度小、功能单一的类。单一职责原则是为了实现代码高内聚、低耦合,提高代码的复用性、可读性、可维护性。 3.1.2 如何判断类的职责是否足够单一? 不同的应用场景、不同阶段的需求背
阅读全文
摘要:2.10运用面向对象分析设计方法开发接口鉴权功能 2.10.1需求分析 需求提出: “为了保证接口调用的安全性,我们希望设计实现一个接口调用鉴权功能,只有经过认证之后的系统才能调用我们的接口,没有认证过的系统调用我们的接口会被拒绝。我希望由你来负责这个任务的开发,争取尽快上线。” 第一轮基础分析:
阅读全文
摘要:2.8常用的基于贫血模型的MVC架构违背OOP吗? 2.8.1什么是基于贫血模型的传统开发模式? MVC: MVC 三层架构中的 M 表示 Model,V 表示 View,C 表示 Controller。它将整个项目分为三层:展示层、逻辑层、数据层,是一个比较笼统的分层方式,落实到具体的开发层面,并
阅读全文
摘要:2.面向对象 2.1面向对象是什么 2.1.1面向对象编程与面向对象编程语言 面向对象编程是一种编程范式或编程风格。它以类或对象作为组织代码的基本单元,并将封装、抽象、继承、多态四个特性,作为代码设计和实现的基石 。 面向对象编程语言是支持类或对象的语法机制,并有现成的语法机制,能方便地实现面向对象
阅读全文
摘要:1.设计模式导读 1.1为什么要学设计模式 应对面试中的设计模式相关问题 告别写被人吐槽的烂代码 提高复杂代码的设计和开发能力 让读源码、学框架事半功倍 优秀的开源项目、框架、中间件,就像一个集各种高精尖技术在一起的战斗机。如果你想剖析它的原理、学习它的技术,而你没有积累深厚的基本功,就算把这台战斗
阅读全文
1
浙公网安备 33010602011771号