函数分解真的是反模式吗?


9

当我阅读您遇到的最糟糕的反模式时,我单击了这篇文章中的链接以登陆有关反模式的网站。

http://sourcemaking.com/antipatterns/functional-decomposition页让我疑惑。

这个反模式有多严重,它到底是反模式吗?因为,尽管我现在主要进行OOP编程,但我仍然不愿意反对纯Java的所有OOP语言以及它们带来的设计实践。而且我猜想,我在编写代码时仍具有函数式编程的一些特征。

这就提出了一个问题,我是坚持OOP + Functional风格做错了吗,还是在行业中很常见,实际上还不是那么糟糕。

我从经验中知道的是,OOP +功能样式与纯OOP开发人员并不完全兼容。但是,与此同时,尽管OOP开发人员在OOP +功能开发方面遇到问题,但反驳的是,OOP解决方案往往设计过度,难以使用,并且根据我的经验,甚至一点也不容易,实际上介绍了一些非常严重的错误可以隐藏的盲点。

因此,即使我与同事讨论了这些主题,但我得出的结论是,所有方法实际上都不是完美的。而且我仍然有未解决的问题。

另一个线程中来自另一个帖子的链接也加剧了OOP问题。链接着眼于Java风格的OOP http://chaosinmotion.com/blog/?p=622

那么将函数式编程与OOP混合的一般态度是什么?开发人员应努力实现什么平衡?


1
您的标题和问题正文正在询问几个相关但完全不同的问题,其中一些听起来很夸张。我在弄清楚您到底在问什么时遇到了麻烦。
blueberryfields

抱歉,我不是母语人士,而且我很难想出更好的标题。欢迎修复。
编码器

1
问题很明确。不要听蓝莓田。
jojo 2011年

5
显然,对于OOP狂热者而言,任何超出OOP的东西都是“反模式”。实际上,最糟糕的反模式是OOP本身的过度使用。
SK-logic

Answers:


8

首先,函数式编程是当前所有酷孩子正在做的事情。反模式实际上是在谈论过程编程(如果将该技术称为“过程分解”,则更为清楚,但事实并非如此),我想您也是。

反模式谈论了用面向对象语言编写过程代码的不良方式,另一页谈论了不良的做法是编写Java-实际上,没有一种语言如此奇妙,您可以做任何想做的事情,但是做不到写不好的代码。

在实践中,与面向过程的代码相比,面向对象的代码具有更多的工程设计-在工程设计方面更少,在工程设计方面更多。

在您的情况下,这取决于具体情况,我不确定您实际上以程序化方式做什么。它是否正确,清晰,可测试,易于修改等?判断代码的标准应基于这种实际的考虑,而不是基于一种特定样式的纯度。在您的情况下,听起来像是理性和知识渊博的人可能会不同意(并同意!),如果这样的话,可能没有客观的方法可以确定问题的真相。


2
您的答案一开始就很好,但是随后您变得含糊不清和不置可否。我读了一篇文章,指出OP与功能分解有关,它是一种可怕的反模式,由程序开发人员尝试将其编程样式转换为面向对象的范例。因此,不,它不取决于具体细节。
罗伯特·哈维

但是我不认为Coder相信反模式是他个人所做的事情(我也没有特别的理由怀疑他)。他的问题(实际上是其中之一)是,是否可以在对象语言中使用过程样式编程(可能更像Java rant博客中显示的静态Java函数中那样)。那取决于他编码的细节。(我在“您的情况下”做了序言)。我认为您基本上是按照“我是否应该像反模式那样编程”来阅读问题,这显然是不好的-但我认为Coder知道这一点。
psr

4
即使这样,程序分解也是一种有效的技术,而将其分解为与OOP兼容性不高就是一种纯粹的狂热主义。让所有的花朵盛开。如果明智地使用,所有技术都是有效的。坚持一种特定的方法根本不明智。
SK-logic
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.