当前位置: 首页 > news >正文

读书-代码整洁之道10-14

  • 类的三大特性:封装、继承、多态;
  • 类应该短小;
  • 单一权责原则认为,类或模块应有且只有一条加以修改的理由;
  • 当类丧失了内聚性,就拆分它;
  • 隔离修改

系统

  • 构造和使用是非常不一样的过程。每个应用程序都该留意启始过程。
  • 将构造与使用分开的方法之一是将全部构造过程搬迁到main或被称之为main的模块中,设计系统的其余部分时,假设所有对象都已正确构造设置。
  • 有一种强大的机制可以实现分离构造与使用,那就是依赖注入,控制反转在依赖管理中的一种应用手段。控制反转将第二权责从对象中拿出来,转移到另一个专注于此的对象中,从而遵循了单一权责原则。
  • 我们应该只去实现今天的用户故事,然后重构,明天再扩展系统、实现新的用户故事。这就是迭代和增量敏捷的精髓所在。
  • 软件系统与物理系统可以类比。它们的架构都可以递增式地增长,只要我们持续将关注面恰当地切分。
  • java中三种方面或类似方面的机制:java代理、纯Java AOP框架、AspectJ的方面。
  • 最佳的系统架构由模块化的关注面领域组成,每个关注面均用纯 Java(或其他语言)对象实现。不同的领域之间用最不具有侵害性的方面或类方面工具整合起来。这种架构能测试驱动,就像代码一样。
  • 拥有模块化关注面的 POJO 系统提供的敏捷能力,允许我们基于最新的知识做出优化的、时机刚好的决策。决策的复杂性也降低了。
  • 系统需要领域特定语言。领域特定语言允许所有抽象层级和应用程序中的所有领域,从高级策略到底层细节,使用 POJO 来表达。

迭进

  • 简单设计,以下规则按其重要程度排列
    1. 运行所有测试
    2. 不可重复
    3. 表达了程序员的意图
    4. 尽可能减少类和方法的数量
  • 不可重复。重复是拥有良好设计系统的大敌。它代表着额外的工作、额外的风险和额外且不必要的复杂度。
  • 表达力。可以通过选用好的名称来表达,也可以通过保持函数和类尺寸短小,还可以通过采用标准命名法。编写良好的单元测试也具有表达性,不过最重要方式却是尝试。下足功夫调整代码,让后来者易于阅读。

并发编程

  • 并发是一种解耦策略。它帮助我们把做什么(目的)和何时(时机)做分解开。
  • 有关编写并发软件的中肯说法
    1. 并发会在性能和编写额外代码上增加一些开销;
    2. 正确的并发是复杂的,即便对于简单的问题也是如此;
    3. 并发缺陷并非总能重现,所以常被看做偶发事件而忽略,未被当做真的缺陷看待;
    4. 并发常常需要对设计策略的根本性修改。
  • 并发防御原则
    1. 单一权责原则
    2. 推论:限制数据作用域
    3. 推论:使用数据复本
    4. 推论:线程应尽可能地独立
  • 警惕同步方法之间的依赖,保持同步区域微小。
  • 测试线程代码:
    1. 将伪失败看作可能的线程问题;
    2. 先使非线程代码可工作;
    3. 编写可插拔的线程代码;
    4. 编写可调整的线程代码
    5. 运行多于处理器数量的线程;任务交换越频繁,越有可能找到错过临界区或导致死锁的代码
    6. 在不同平台上运行;应该在所有可能部署的环境中运行测试
    7. 装置试错代码。硬编码、自动化

逐步改进

解决之道就是保持代码持续整洁和简单。永不让腐坏有机会开始

http://www.lryc.cn/news/93915.html

相关文章:

  • UDP 广播/组播
  • 高效创作助手:ChatGPT最新版实现批量撰写聚合文章的全新水平
  • Python中的包是什么,如何创建和使用包?
  • Spring Cloud Alibaba Seata(二)
  • 如何在 MySQL 中使用 COALESCE 函数
  • Python爬虫之Scrapy框架系列(22)——初识分布式爬虫scrapy_redis
  • ChatGPT的前世今生
  • WireShark常用协议抓包与原理分析
  • Mysql数据库操作总结
  • 在 ZBrush、Substance 3D Painter 和 UE5 中创作警探角色(P2)
  • 如何在大规模服务中迁移缓存
  • 【GPT LLM】跟着论文学习gpt
  • 【玩转Docker小鲸鱼叭】Docker容器常用命令大全
  • 专项练习11
  • ASP.NET+SQL通用作业批改系统设计(源代码+论文)
  • 基于深度学习的高精度打电话检测识别系统(PyTorch+Pyside6+YOLOv5模型)
  • Vue搭建智能文本检索视频界面
  • 软考A计划-系统集成项目管理工程师-一般补充知识-中
  • springboot-内置Tomcat
  • Flink流批一体计算(2):Flink关键特性
  • 2023软件工程中各种图在现代企业级开发中的使用频率
  • macOS Big Sur 11.7.8 (20G1351) 正式版 ISO、PKG、DMG、IPSW 下载
  • 【C++案例】一个项目掌握C++基础-通讯录管理系统
  • Triton教程 --- 动态批处理
  • Python的并行(持续更新)
  • chatgpt赋能python:Python实现Fibonacci数列
  • 开环模块化多电平换流器仿真(MMC)N=6
  • java springboot整合MyBatis联合查询
  • windows2022证书配置.docx
  • HCIP网络笔记分享——IA回顾及OSPF协议