软件设计
Software Design:
面向对象设计与面向对象编程,OOA/OOD/OOP,编程范式
设计原则
设计模式
编程规范,代码重构和Code Review
DDD
系统设计(系统架构)
大纲
开放性问题
工作中我们会遇到需求不明确的开发任务,实际上,在面试中,我们也经常遇到一些开放性的设计问题,对于这类问题,你是如何解答的?
针对需求不明确,表述含糊,理解上存在二义性的情况,只能把这些都搞清楚,这就体现出了一个良好的工作习惯和解决问题的方法的重要性。我的一般做法是:首先,试图理解需求,把有疑问的地方列出来,将这些问题分为功能性需求的问题和非功能性需求的问题,针对这两类问题分别解决,功能性需求问题,属于业务范畴,可能是自己的业务领域知识不足,也可能是功能需求描述不够细或者考虑不周全,去找相关人沟通,并不断积累业务知识和业务经验;对与非功能性需求,这个一般属于系统固有复杂度,需要自己多思考,查阅资料,借鉴他人的经验,找leader和同事沟通方案,不断优化调整,总之主动成长是必要的。
需求理解,对领域知识进行强化,方式是沟通、搜索资料等
根据实际业务估算业务对系统的非功能性的要求
弄清楚需要用到的技术
做技术 Spike
设计技术实现方案
设计测试方案,可能会调整对应的设计
遇到问题解决问题
参考资料
System design primer Learn how to design large-scale systems. Prep for the system design interview. Includes Anki flashcards.
架构师之路
A comprehensive and curated list of design systems, style guides and pattern libraries that you can use for inspiration.
Books
设计模式之禅
设计模式:可复用面向对象的基础
重构
架构整洁之道
Head First 设计模式
Java 与模式
深入浅出面向对象分析与设计
代码大全
代码整洁之道
编写可读代码的艺术
重构与模式
修改代码的艺术
演进式架构设计
敏捷软件开发:原则模式与实践
最后更新于