功能-OO混合语言的设计模式?

fol*_*one 41 oop design-patterns functional-programming scala

是否已经有任何Scala等语言的最佳实践集合?

我找到了关于函数式语言的设计模式,功能性战略编程的设计模式的工作.有OO语言的GoF设计模式.但功能性OO混合动力车是否有任何模式?我所看到的只是这个清单.什么是已知的?

San*_*ozi 19

Bill Venners的两种模式; 我认为两者都在ScalaTest中大量使用:

Stackable Trait(在结构上类似于装饰器图案,除了它涉及用于类组合而不是对象组合的装饰).

无私特质(允许图书馆设计师提供其客户可以通过mixin或导入访问的服务).

键入安全构建器

表达式问题的独立可扩展解决方案 - 就像"可扩展的组件抽象"一样,它不是模式目录,但它也处理类似的问题(例如访问者模式)

弃用观察者模式 - 观察者的替代方案.

我们还可以将Haskell类型的Scala仿真视为一种设计模式.第一个描述(我至少可以找到)是在 穷人的类型类中.此主题还提供了一些博客条目.

如果我还提到各种monad,我想我并不完全错.你可以找到很多处理它们的资源.


Von*_*onC 12

虽然不是直接设计模式目录本身,但" 可扩展组件抽象 "(Martin Odersky; Matthias Zenger)研究了可重用组件的三个构建块:

  • 抽象类型的成员,
  • 明确的自我类型,和
  • 模块化mixin组合.

它重新审视了几种设计模式(发布/订阅,主题/观察者,上下文/组件),以说明和理解哪些语言结构对于实现可伸缩和动态组件系统至关重要.


Don*_*zie 5

一个经常观察到的模式非常需要一个名称,它使用curried参数列表和by-name参数创建控件抽象.

def command(expr: T)(block: => Unit) {...}
Run Code Online (Sandbox Code Playgroud)

生产

command (expr) {
  block
}
Run Code Online (Sandbox Code Playgroud)

  • 顺便说一下,我认为我们应该注意术语,在这种情况下,这不是一个curried*function*,而是一个带有多个参数列表的*方法*. (2认同)