面向对象方法的实践时可能的陷阱

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
可观测监控 Prometheus 版,每月50GB免费额度
简介: 【7月更文挑战第2天】本文介绍面向对象开发面临的问题:过度复杂性导致项目失败,如在库存管理系统中等。因此简化设计、合理使用继承、现实期望、适当选择设计模式和工具、以及提升团队技能是成功的关键。

1 主要问题:过度复杂性

许多开发团队在采用面向对象方法时,倾向于创建过于复杂的类和对象结构。
比如一个企业在开发一个库存管理系统时,设计了过于复杂的类层次和对象关系。结果是系统的开发时间大大延长,维护变得非常困难,最后项目失败。
image.png

这样的例子清楚地展示了过度复杂性如何导致项目失败,强调了简化设计的重要性

过度的对象结构和层级关联,这会导致开发、维护和理解代码变得更加困难,进而影响项目的成功。

2 不合理的继承

继承是面向对象编程中的一个强大特性,但不合理的继承层次会导致代码的脆弱性和维护困难。
比如你公司在开发一个客户管理系统时,创建一个深层次的继承结构。
这样每次修改基类的一个小特性都会影响到多个子类,导致系统脆弱且难以维护。

image.png

开发人员应当慎重使用继承,尽量优先考虑组合而非继承。

3 不切实际的期望

面向对象技术经常被过度宣传,导致管理层和开发团队对其期望过高。使用 OO 面向对象的原因在于,OO 以一种特定的方式抽象数据(即:将对结构上运行的函数与该结构捆绑在一起)。

如果一个大型项目的管理层认为面向对象技术能解决所有问题,因此忽视了合理的项目管理和需求分析,最终项目无法按时完成且质量不佳。

因此团队应当保持现实的期望,认识到面向对象技术并不能解决所有问题,依然需要合理的项目管理和设计实践。

比如任何领域模型都不能很好地表达为对象的东西都不适合OO方法。
例如,一些数学(统计、逻辑等)或技术(例如编译器)程序在不同的风格中可以更好地表达。
对于业务工作流应用程序,OO 和自定义 DSL 技术的结合非常有效,使我们能够对业务流程中发生的各种关系和事件进行建模.

4 设计模式滥用

设计模式是解决常见设计问题的经验总结,但滥用设计模式会导致不必要的复杂性。 最常见的设计模式错误之一是过度使用它们。这意味着在不需要的地方应用模式,或者在同一项目中使用过多的模式。过度使用模式会使代码变得复杂、混乱且难以更改。

image.png

开发人员应当根据具体问题选择合适的设计模式,而不是盲目套用。

比如一个hello world演示程序,使用RAD设计。
比如团队在开发一个电子商务平台时,试图在每个模块中都使用设计模式,结果是代码变得过于复杂且难以理解,导致项目进度延迟。

又比如工厂模式的滥用。如果项目有大量的工厂模式,因为有些人认为您可能将对象 A 用于本地实现,将对象 B 用于远程实现,并且它是通过工厂抽象的(这是一件明智的事情)。

但是,“远程”实施从未被需要或实施,甚至从未预见到未来。如此不太熟练的工程师开始将这种模式用于许多其他事情,就像千篇一律一样,这将导致浪费和设计滥用。

5 开发工具和技术的不成熟

20世纪90年代的开发工具和技术尚未完全成熟,导致在实际应用中存在诸多问题。即使现在安全漏洞也是呈上升趋势;最近的一项研究估计,96% 的 Web 应用程序至少包含一个严重漏洞。

比如开发一个Web 应用程序,您需要一个技术堆栈——一组编程工具和语言。选择合适的技术堆栈对于应用程序的性能、可扩展性和可维护性至关重要。然而,随着语言、框架和库环境的不断变化,做出正确的决定可能具有挑战性。

在选择合适的技术堆栈时,必须考虑许多方面,包括项目要求、团队能力、社区支持和未来扩展的潜力。在选择最适合项目要求的技术时,应考虑开发时间、可伸缩性和可维护性等因素

因此在选择和使用开发工具时,应当考虑其成熟度和适用性,不要盲目追求最新技术。

一个团队使用了当时最新的面向对象开发工具,但该工具不够成熟,存在许多Bug和性能问题,导致开发过程非常痛苦,项目也将因此失败。
例如在开发数据密集型应用程序时,选择一种能够有效管理海量数据集的技术至关重要。

保持竞争力需要跟上最近的发展和趋势。几年前流行的技术性产品可能已被提供更好性能、可扩展性和可能的安全措施的新产品所取代。

因此,建议在为您的 Web 开发项目选择技术堆栈之前进行广泛的研究。

6 团队技能不足

面向对象开发需要开发团队具备一定的技能和经验,而许多团队在这方面存在不足。
如果公司决定全面转向面向对象开发,但团队成员大多数没有相关经验,缺乏必要的培训和指导,结果是开发出的系统质量低下,项目失败。

因此加强团队培训和教育,了解团队将要使用的开发工具和方法,提升团队的面向对象开发能力,是成功实施面向对象开发的关键。

目录
相关文章
|
Web App开发 编解码 监控
防御性设计和开发
“防御性编程(Defensive programming)是防御式设计的一种具体体现,它是为了保证,对程序的不可预见的使用,不会造成程序功能上的损坏。它可以被看作是为了减少或消除墨菲定律效力的想法。”
849 0
防御性设计和开发
|
3月前
|
算法 Java 程序员
在Java的编程世界里,多态不仅仅是一种代码层面的技术,它是思想的碰撞,是程序员对现实世界复杂性的抽象映射,是对软件设计哲学的深刻领悟。
在Java的编程世界里,多态不仅仅是一种代码层面的技术,它是思想的碰撞,是程序员对现实世界复杂性的抽象映射,是对软件设计哲学的深刻领悟。
68 9
|
14天前
|
设计模式 程序员 Serverless
探索编程之美:从代码细节到技术哲学
【10月更文挑战第28天】在这篇文章中,我们将一起走进编程的世界,探索那些隐藏在代码行间的艺术与哲理。通过深入浅出的讲解和实际的代码示例,我们不仅能够学习到技术层面的知识,更能体会到编程作为一种创造性活动所带来的乐趣和启示。无论你是初学者还是资深开发者,都能在这段旅程中找到新的视角和灵感。
43 11
|
程序员
《软件设计的哲学》第三章 工作代码是不够的
《软件设计的哲学》第三章 工作代码是不够的
|
6月前
|
程序员 计算机视觉
程序员的“防御性编程”
最近都在聊程序员要做好“防御性编程”,"防御性编程"的概念从之前的“保护程序”一下子变成了现在的“保护程序员”,一字之差,千差万别。
程序员的“防御性编程”
|
敏捷开发 算法 安全
如何写出高质量代码:特征、编程实践技巧和软件工程方法论
如何写出高质量代码:特征、编程实践技巧和软件工程方法论
|
Java 领域建模
java面向对象思维程序设计开发以及案例 -电梯运行问题对象分析与程序设计(1)
java面向对象思维程序设计开发以及案例 -电梯运行问题对象分析与程序设计(1)
java面向对象思维程序设计开发以及案例 -电梯运行问题对象分析与程序设计(1)
|
Java 测试技术
java面向对象思维程序设计开发以及案例 -电梯运行问题对象分析与程序设计(2)
java面向对象思维程序设计开发以及案例 -电梯运行问题对象分析与程序设计(2)
java面向对象思维程序设计开发以及案例 -电梯运行问题对象分析与程序设计(2)
|
消息中间件 安全 程序员
关于防御性编程,你应该知道的事
提起编程,对于程序员同学而言并不陌生,关于防御性编程相信大家也有所耳闻,但是它具体包括哪些内容呢?
关于防御性编程,你应该知道的事