从OO到10000英尺的功能编程

Gar*_*ary 7 f# haskell functional-programming

我一直在使用f#和Haskell来学习函数式编程.直到我能在我们公司获得f#批准,我仍然必须使用c#.我仍然在努力保持功能风格,因为我注意到了几个好处.

这是一个典型的问题.

  1. 数据库中有一个键集表,有3个键(650万行)
  2. 还有4个中小型支撑桌.
  3. 基于几个输入有复杂的公式.

我必须使用上述所有数据来计算一个值,并将其与每个键集行相关联,然后将其发送回数据库.其他4个表有很多查找.出于性能考虑,这一切都是在内存中完成的.

我确切地知道如何使用静态字典,对象模型,策略模式等在OO中进行操作,但是在功能性方面我无法摆脱使用这些结构的难闻气味.

我目前正在为功能解决方案做出以下假设.

  1. 静态词典很糟糕.看起来这个功能可能有副作用.

  2. 我需要一个Calculate函数,它接受一个不可变的对象,并返回一个带有三个键和计算值的不可变对象.在这个函数里面可能有相同风格的另一个函数.

  3. 传统的OO模式可能不会起作用.

你会如何在高水平上设计它?

我错了吗?我错过了什么吗?

Nik*_*lja 6

不,你没错.OOP和函数式编程都有其优点和缺点.

开发人员需要知道如何以及何时使用每种开发风格.幸运的是,C#支持两种开发方式.

在我看来,我每天都使用函数和oop编程风格,oop在处理各种抽象工件(实体,名词等)之间的复杂交互和相互依赖时最好.在处理算法,数据转换等时最好使用函数式编程.例如,解决给定问题所需的语句复杂性很大的情况.

我通常在我的域(实体,聚合,值对象,存储库和事件)上使用面向对象的编程,并为我的服务对象保留函数式编程.

大多数情况下,它是一种气味,或者是最好的感觉,因为在软件开发中,无论是哪种方式都不是明确的案例,而经验和实践往往是给定选择的最佳判断.