软件设计

Software Design:

  1. 面向对象设计与面向对象编程,OOA/OOD/OOP,编程范式

  2. 设计原则

  3. 设计模式

  4. 编程规范,代码重构和Code Review

  5. DDD

  6. 系统设计(系统架构)

大纲

开放性问题

  • 工作中我们会遇到需求不明确的开发任务,实际上,在面试中,我们也经常遇到一些开放性的设计问题,对于这类问题,你是如何解答的?

针对需求不明确,表述含糊,理解上存在二义性的情况,只能把这些都搞清楚,这就体现出了一个良好的工作习惯和解决问题的方法的重要性。我的一般做法是:首先,试图理解需求,把有疑问的地方列出来,将这些问题分为功能性需求的问题和非功能性需求的问题,针对这两类问题分别解决,功能性需求问题,属于业务范畴,可能是自己的业务领域知识不足,也可能是功能需求描述不够细或者考虑不周全,去找相关人沟通,并不断积累业务知识和业务经验;对与非功能性需求,这个一般属于系统固有复杂度,需要自己多思考,查阅资料,借鉴他人的经验,找leader和同事沟通方案,不断优化调整,总之主动成长是必要的。

  1. 需求理解,对领域知识进行强化,方式是沟通、搜索资料等

  2. 根据实际业务估算业务对系统的非功能性的要求

  3. 弄清楚需要用到的技术

  4. 做技术 Spike

  5. 设计技术实现方案

  6. 设计测试方案,可能会调整对应的设计

  7. 遇到问题解决问题

参考资料

A comprehensive and curated list of design systems, style guides and pattern libraries that you can use for inspiration.

Books

  • 设计模式之禅

  • 设计模式:可复用面向对象的基础

  • 重构

  • 架构整洁之道

  • Head First 设计模式

  • Java 与模式

  • 深入浅出面向对象分析与设计

  • 代码大全

  • 代码整洁之道

  • 编写可读代码的艺术

  • 重构与模式

  • 修改代码的艺术

  • 演进式架构设计

  • 敏捷软件开发:原则模式与实践

最后更新于