编程设计模式
Design Patterns for programming
我正在努力寻找学习正确的软件工程设计的最佳方法,如果能指导我采用一种万无一失的方法在项目设计之前剖析项目,并找出最有用的设计模式应该是什么,我将不胜感激予以实施。我通读了 "Gang Of Four" 但感觉它缺少为给定软件选择正确设计模式的可靠方法。
我不确定专业人士是如何处理这个问题的,但我确信这是通过多年的经验得出的。然而,经过我多年的编程,我还没有找到发现设计模式的过程。
谢谢,
铝
如果您对优秀的软件设计感兴趣,请阅读: Domain Driven Design or Clean Architecture, or Test Driven Design 。 GoF 描述的设计模式不是指大局软件设计,而是指如何在特定上下文中解决常见问题。
请记住,软件设计不是一成不变的,完全取决于上下文。主要目标是向用户提供请求的(正确的)功能,使代码可测试、可维护并在时间和预算等特定限制内。
在敏捷环境中,通常没有人在做一个包含每个细节的整体设计,但是软件的架构是在敏捷过程中出现的。因此,还要熟悉 Scrum、看板、极限编程等敏捷方法。
在正确的时间为正确的场景选择和应用正确的设计模式始终是一个挑战。尽管设计模式应该作为理论来学习,但真正让人感兴趣的是某人能够确定做出正确技术决策的时间和地点。
对于学习者,我的建议是尽可能多地了解模式及其背后的概念;并通过给定的、易于理解的示例让它们保持更新。然后,在您的需求澄清或功能设计阶段(Grooming/Planning 会议,如果它在敏捷上),或开发阶段(敏捷:在 Sprint 中),或在代码审查阶段尝试查看编码设计并集思广益以找到您已知的模式的任何匹配映射。通过实践和体验,这种技能会得到提高,以后这将成为工程师的一种 attempt-less 情感。
此外,研究最有可能应用设计模式的常见 mistakes/problems;然后(没有 re-inventing)轮子,您可以在适用的情况下使用正确的设计模式预先做出正确的技术决策。
作为软件工程师,我曾经采用的一种做法是 D3(设计驱动开发);在完整或 JEDUF (Just-Enough-Design-Up-Front) 完成之前,任何有效编码都不会开始(是的,一个字都没有!!);这意味着,就在 "effective" 编码开始之前,您 "exactly" 知道如何定义您的工作流程并通过适用的模式等连接它们。(此外,这种方法将减少 code-reviewing 时间很多)
所以我想说的是,问题在于,您在概念精神方面涵盖了多少模式,以及您在正确选择正确模式时做出正确判断以选择正确模式的技能有多少 time/place 来了。
干杯,D
我正在努力寻找学习正确的软件工程设计的最佳方法,如果能指导我采用一种万无一失的方法在项目设计之前剖析项目,并找出最有用的设计模式应该是什么,我将不胜感激予以实施。我通读了 "Gang Of Four" 但感觉它缺少为给定软件选择正确设计模式的可靠方法。
我不确定专业人士是如何处理这个问题的,但我确信这是通过多年的经验得出的。然而,经过我多年的编程,我还没有找到发现设计模式的过程。
谢谢, 铝
如果您对优秀的软件设计感兴趣,请阅读: Domain Driven Design or Clean Architecture, or Test Driven Design 。 GoF 描述的设计模式不是指大局软件设计,而是指如何在特定上下文中解决常见问题。
请记住,软件设计不是一成不变的,完全取决于上下文。主要目标是向用户提供请求的(正确的)功能,使代码可测试、可维护并在时间和预算等特定限制内。
在敏捷环境中,通常没有人在做一个包含每个细节的整体设计,但是软件的架构是在敏捷过程中出现的。因此,还要熟悉 Scrum、看板、极限编程等敏捷方法。
在正确的时间为正确的场景选择和应用正确的设计模式始终是一个挑战。尽管设计模式应该作为理论来学习,但真正让人感兴趣的是某人能够确定做出正确技术决策的时间和地点。
对于学习者,我的建议是尽可能多地了解模式及其背后的概念;并通过给定的、易于理解的示例让它们保持更新。然后,在您的需求澄清或功能设计阶段(Grooming/Planning 会议,如果它在敏捷上),或开发阶段(敏捷:在 Sprint 中),或在代码审查阶段尝试查看编码设计并集思广益以找到您已知的模式的任何匹配映射。通过实践和体验,这种技能会得到提高,以后这将成为工程师的一种 attempt-less 情感。
此外,研究最有可能应用设计模式的常见 mistakes/problems;然后(没有 re-inventing)轮子,您可以在适用的情况下使用正确的设计模式预先做出正确的技术决策。
作为软件工程师,我曾经采用的一种做法是 D3(设计驱动开发);在完整或 JEDUF (Just-Enough-Design-Up-Front) 完成之前,任何有效编码都不会开始(是的,一个字都没有!!);这意味着,就在 "effective" 编码开始之前,您 "exactly" 知道如何定义您的工作流程并通过适用的模式等连接它们。(此外,这种方法将减少 code-reviewing 时间很多)
所以我想说的是,问题在于,您在概念精神方面涵盖了多少模式,以及您在正确选择正确模式时做出正确判断以选择正确模式的技能有多少 time/place 来了。
干杯,D