有许多功能习语:monad,applicatives,arrows等.它们记录在不同的文章中,但不幸的是我不知道任何书籍或文章在一个地方汇总(有Typeclassopedia但它有很多没有很好覆盖的区域).任何人都可以推荐一篇文章/书籍,它可以在一个地方很好地覆盖它们,并且具有FP中级技能的程序员可以访问它吗?
OOP可能是当今软件设计中使用最多的编程范例.我的问题是 - 其他范例可以与之竞争并且可以代替oop?为了澄清这个问题,我不是在询问其他范例是什么.其中有很多,我想知道哪一个:
如果有的话,它的优缺点是什么,为什么它比oop更好/更差,最好用什么语言,在流行的语言中使用它,有任何设计模式,还可以完全取代oop?
这与函数式编程取代GoF设计模式有些关系吗?
自从在C#中引入lambdas和动态,是否有任何标准设计模式可以被认为是过时的或使用lambdas或其他语言特性以其他方式解决?
例如,C#的动态功能现在可用于执行多种方法. http://achoiusa.wordpress.com/2009/08/27/exploring-c-4-0-multimethods/ (我想Marc Gravell有一些关于此的帖子?)
就个人而言,我倾向于使用现在的Func of Tn来做工厂.
例如
public static class SomeFactory
{
public static Func<IUnitOfWork> GetUoW =
() => new EF4UoW(new SomeModelContainer());
}
// usage
var uow = SomeFactory.GetUoW();
// testabillity
var testUoW = new InMemUoW();
testUoW.Add(new Customer()...);
SomeFactory.GetUoW = () => testUoW;
// the service can get an UoW using the factory
var result = SomeDomainService.DoStuff(...);
Run Code Online (Sandbox Code Playgroud)
有人有其他例子吗?
[编辑]当然,模式本身并不过时,但有些模式是范式特定的,因此C#现在是多范式,C#的一些功能属性可能会使一些OOP模式缺乏吸引力.
1994年推出的GoF设计模式书是用C++语言编写的,许多代码示例都是用C++编写的.其他语言的程序员认为他们的语言不需要这23种设计模式,因为这些语言具有使许多模式冗余的特征.
来自维基百科:
设计模式的一个主要批评是它的模式只是C++缺少功能的变通方法,用冗长的具体模式取代优雅的抽象特征,基本上成为"人类编译器"或"手工生成某些宏的扩展".Peter Norvig演示了设计模式中23种模式中的16种在Lisp或Dylan中被简化或消除(通过直接语言支持).
自Design Patterns Books出版以来,C++经历了五次修订(98,33,11,14,17).那么问题是,现代C++在多大程度上简化或消除了对这23种设计模式的需求?
列出设计模式以及C++语言功能可以消除或简化对该模式的需求.
我们有一本非常好的GoF书(设计模式:可重用的面向对象软件的元素),关于面向对象编程中的模式,以及关于这个主题的大量文章和资源.
是否有关于函数式编程的模式(最佳实践)的书籍(文章,资源)?
对于Python和Ruby等语言的动态编程?
对于AOP?
aop design-patterns functional-programming dynamic-programming
以下列方式将比较器应用于列表时,使用的设计模式是什么或此处使用的技术是什么?
Collections.sort(myCollection, new Comparator<MyItem>() {
@Override
public int compare(MyItem item1, MyItem item2) {
return item1.getId().compareTo(item2.getId());
}
});
Run Code Online (Sandbox Code Playgroud) Java 9即将推出,更多功能将添加到Java接口,如私有方法.default
接口中的方法是在Java 8中添加的,主要是为了支持在集合中使用lambda,而不会破坏与该语言的早期版本的复古兼容性.
在Scala中,trait
s中的方法非常有用.但是,Scala使用不同的方法处理trait
s而不是Java default
.考虑多重继承解决方案或使用trait
s作为mixin.
除了以上使用,哪些是使用default
方法的真实场景值得?这几年是否出现了一些使用它们的模式?使用这种方法可以解决哪些问题?
我是一名MVC Web开发人员,他对编写Web应用程序的函数式编程非常感兴趣(具体来说,我被Erlang和Cowboy迷住了.)
我在找到/ resources的答案时遇到的问题是用什么模式替代FP中的MVC.
显然,ORM的概念在FP中是荒谬的,因为它不是面向对象的,那么用什么代替持久性逻辑呢?通常只是构建一个使用库来创建与数据存储区接口的函数的模块,还是有类似于ORM的工具?
建议和资源链接都将受到高度赞赏.Erlang/Cowboy特别帮助的奖励积分.谢谢.
Lisp的优点之一是Macros.我一直在读Java,你一次又一次地编写设计模式.不是在Lisp/Clojure中.
在Lisp/Clojure中,您将在宏中声明模式,并且您只需编写实际代码.
好的,好看和花花公子,但看到相信.
你能不能给我(或参考我)一个代码示例 - 最好是Clojure-关于如何在宏中声明一个设计模式?
有人声称OOP设计模式与函数式语言无关.是否有代码演示如何在Haskell中实现每个模式?特别是,完整的演示还必须展示如何表示对象,OO多态性等.
我正在阅读这篇关于 Scala 设计模式的文章,他们提出了 Builder 模式与 Java 相关的论点,因为它允许使用以下代码:
CarBuilder carBuilder = new CarBuilder()
carBuilder.setSeats(2)
carBuilder.setSportsCar(true)
carBuilder.setTripComputer(true)
carBuilder.setGPS(false)
Car car = carBuilder.build()
Run Code Online (Sandbox Code Playgroud)
与更容易混淆的形式:
Car car = new Car(2, true, true, false)
Run Code Online (Sandbox Code Playgroud)
他们后来表示:
在像 Scala 这样允许你在传入参数时命名参数的语言中,构建器模式大多已经过时......
这是否与 Python 类似,因为您可以在任何调用中命名关键字参数,或者这种设计模式是否有一些合理的应用?