The Expression Problem and its solution
8 months ago
- #programming
- #Clojure
- #design-patterns
- 表达式问题是软件开发中的一个基本设计难题,其核心在于如何在无需修改现有代码的情况下,同时扩展新的数据类型和新的操作。
- 面向对象编程(OOP)便于添加新类型但难以添加新操作,因为需要修改现有接口和类。
- 函数式编程(FP)便于添加新操作但难以添加新类型,因为需要更新所有处理这些类型的现有函数。
- OOP中的访问者模式可以'翻转'这个问题,使添加操作变得容易而添加类型变得困难,尽管这会引入复杂性和限制。
- Clojure的多重方法和协议提供了优雅的解决方案,允许在不修改现有代码的情况下独立扩展类型和操作。
- Clojure的协议类似于接口,支持在类型定义后实现操作,无需访问源代码即可实现扩展性。
- 像Clojure这样的语言通过多重分发和开放方法,允许在类型外部定义方法,为表达式问题提供了清晰的解决方案。
- 推荐使用小型单一方法协议以获得更好的扩展性,因为向现有协议添加方法会带来问题。