是否有通常用于创建大型功能编程应用程序的特定工作流程或设计模式?[关闭]


13

我已经探索Clojure已有一段时间了,尽管我没有在任何重要的项目中使用过它。基本上,我对语法和某些惯用法已经很熟悉了。来自OOP的背景,Clojure是我非常关注的第一种功能语言,我自然对功能处理方式不太满意。

也就是说,创建大型功能应用程序时是否存在特定的工作流程或设计模式?我真的很想开始“真正地”使用函数式编程,但是由于我目前的专业知识不足,恐怕会导致史诗般的失败。

“四人帮”是面向OO程序员的标准,但是是否有类似的东西更针对功能范例呢?我发现的大多数资源都具有出色的编程能力,但它们并没有退缩以提供更广泛,更体系结构的外观。


6
对于功能编程已经提供的功能,某些GOF模式实际上只是OO语言中的解决方法。参见stackoverflow.com/q/327955
罗伯特·哈维



我认为在此讨论中,过多地关注于GoF / OOP特定的模式。任何人都可以发布一些实际的函数式编程特定的模式(这不仅试图证明函数式语言中GoF的琐碎性)吗?
Daniel B

Answers:


3

这种模式通常是不适当的基础模型损坏的症状。

OOP被设计打破了,不适合大多数应用,因此它带有所有所谓的“模式”。功能模型(稍微有点)更加灵活,那里的“模式”需求不是那么明显。

一旦开始应用(对于功能程序员来说自然)的面向语言的方法,针对每个特定的问题域使用或创建DSL,您将发现根本没有显示任何模式,因为您始终在使用适当的模型来处理描述问题。

当然,即使在非常抽象,简洁和纯净的数学中,也不可避免地会出现一些重复出现的高级“模式”或“配方”,但是它们与GoF模式不同,并且具有不同的抽象级别。例如,您会发现monad有用。


我认为最后两段+1。关于OOP,我对它被打破的理由感到好奇,除了它是通常用于特定问题的通用工具(因此出现了像GoF这样的低层模式)之外。您可以简要阐述一下,还是发布一个总结您的观点的链接?
Daniel B

@ DanielB,OOP本身没有什么问题,但是通常使用它的方式是完全错误的。该模型仅适合一些实际问题(在适当应用的情况下确实可以解决问题),而对于其余模型,则需要所有拐杖和胶带来安装。例如,请参阅我在programmers.stackexchange.com/questions/52608/…上的答复。
SK-logic

好的,我想我在同一页面上。实际上,我之前可能曾经问过这个确切的问题,对此感到抱歉-您所说的那句话的方式似乎暗示着更多。
Daniel B

-3

我个人认为设计模式是语义的。我记得使用MVC重写了一些旧的应用程序,只是为了确保我理解了模式并以为自己做过。但是,最后,我没有从MVC上获得任何原始代码。

但是,如果我要将原始代码应用于更大的开发环境,并告诉某人该特定方法存在问题,那么该开发人员将很难找到问题所在。但是,如果我说ContractController由于某种原因被淘汰,他将确切地知道从哪里开始。

设计模式很棒。但是就像我说的,我认为它们是语义的!

编辑:您的传教士类型使我震惊。没有MVC(或其他设计模式)如何开发任何东西!


2
语义(sɪˈmæntɪk)—形容词1.与意义有关或与之相关,或源于不同单词或符号的含义之间的区别。2.与语义有关或与之有关(对意义的研究)3.与形式理论的解释有关的逻辑,就像给出真相表作为句子连接词的说明一样
罗伯特·哈维

+1-我的意思是,设计模式只是一种交流手段!
aserwin

设计模式不只是一种交流方式;它们是可以理解的具体配方,可以在软件中实施以解决某些常见问题。
罗伯特·哈维

那就是书上所说的。但是,我从来没有真正通过没有它无法解决的设计模式解决问题。根据我自己的经验,我注意到的唯一优势是能够互相谈论代码!;)
aserwin 2012年

1
关于您的编辑:因此,您希望每次编写新的代码时都重新发明轮子吗?
罗伯特·哈维
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.