我该如何设计我的Scala CRUD?

时间:2017-02-24 00:59:19

标签: scala design-patterns

我一直在寻找有关Scala设计模式的文章,但我发现很难找到。我找到的那个,Cake Pattern,似乎你需要一堆代码来做简单的事情。 那么,我在做什么? Java中的Scala代码:( 我很乐意在这里或博客中找到一些关于如何以良好的方式混合特性以便为我的系统提供良好设计的例子。

样品:

   
trait DAO {
  def create: Model
}
trait MongoDAO extends DAO {
  override def create: Model = ???
}
class MyBussiness(dao: DAO) {
  def validateAndStore(m: Model) = {
    dao.create(m)
  }
}

1 个答案:

答案 0 :(得分:1)

当谈到OOP所理解的设计模式时,其中许多都不再有意义。功能:组合,更高阶,应用...... - 让您无需创建名为FactoryBuilder等的东西即可逃脱。 (Here你有关于这个主题的一些很好的介绍。在F#中,它适用于所有的FP。)

相反,尝试接受Scala的功能方面。伟大的起点是Functional Programming in Scala。当您开始内化FP概念时,您会越来越不需要使用任何类型的模式,因为您可以通过一系列经过深思熟虑的功能来表达您的大多数想法。

当您开始对Scala的语法及其所有功能概念感到满意时,请开始阅读有关Cats,Scalaz和Shapeless的内容 - 这3个库为您提供了一些更高级的FP概念。稍后您可能也会开始寻找FP论文。 Here你总结了一些最终可以用Scala和FP做的高级事情。

从长远来看,蛋糕模式,我认识的大多数人(包括我)都得出结论,这是一种反模式。 Play甚至放弃了这种方法。

在您的CRUD中,为了简单起见。利用功能组合和不变性。你不会在第一次尝试时把一切都搞定 - 尝试 - 学习OOP花了你的时间,FP在这方面没有什么不同。