纯函数模块间的依赖:硬编码vs替代方案——混合范式转型困惑
从过程式转向「小FP大OO」的模块组织困惑
我之前一直做过程式开发,现在正在转向**小处函数式(FP),大处面向对象(OO)**的开发范式,最近遇到了一个具体的技术问题想请教:
我现在有一批纯数值数学函数,全部都是无副作用的,这些函数被拆分成了不同的模块,其中部分函数需要调用其他模块里的函数结果。下面是我写的Scala伪代码示例:
// 数学领域:基础数值输出类型 case class A(v: BigDecimal) case class B(v: BigDecimal) case class C(v: BigDecimal) case class DD(v: BigDecimal) case class FF(v: BigDecimal) // 复合结果类型 case class EE(b: B, c: C, d: FF) // 基础数学函数模块 object Primary { def alpha(v: A): B = { /* 纯数学计算逻辑 */ } def beta(v: A): C = { /* 纯数学计算逻辑 */ } // ... 更多基础函数 } // 组合型数学函数模块 object Secondary { import Primary.{alpha, beta} def one(a: A, d: DD): EE = EE(alpha(a), beta(a), two(d)) def two(d: DD): FF = { /* 纯数学计算逻辑 */ } } // 核心业务领域类型 case class Foo(id: String, value: BigDecimal) case class Baz(foo: Foo, e: EE) // 业务服务模块 object Service { import Secondary.one def makeFoo(): Baz = { val inputA = A(BigDecimal(100)) val inputDD = DD(BigDecimal(200)) val computedEE = one(inputA, inputDD) val foo = Foo("FOO_001", BigDecimal(300)) Baz(foo, computedEE) } }
我的困惑点在于:这些纯函数模块(Primary、Secondary)目前都是用Scala单例对象实现的,虽然函数本身都是符合FP要求的无副作用纯函数,但从OO的角度来看,这种单例的组织方式是不是不够贴合「大处OO」的范式?有没有更合适的方式来组织这些纯函数模块,既能保留FP的纯函数特性,又能在整体架构上符合OO的设计思路?
内容的提问来源于stack exchange,提问作者schrödingcöder
相关产品推荐
相关产品推荐

