在过去的几个月里,我一直在从 Java 过渡到 Groovy,我可以体会到它带来的许多好处:更少的代码、闭包、构建器、最终使 Grails 之类的框架成为可能的 MOP、编写测试时易于模拟等.
然而,我的同事“指责”我的代码不够时髦。也就是说,我仍然为我的参数和字段声明类型,倾向于使用继承和多态而不是鸭子类型等。在我看来,在这些情况下,它不仅是动态与静态的,而且是动态与面向对象的范例一种困境。在这些情况下,我仍然倾向于选择 OO。我觉得 OO 范式在它的基本前提中具有很大的价值,它允许您将代码构造抽象和关联到特定的现实世界概念。
所以,这里有一些我需要帮助的特殊问题:
我应该为我的参数、字段等声明类型吗?
当简单方法可以时,我应该将代码块声明为闭包吗?
我什么时候应该使用鸭子类型而不是多态动态调度。例如,在 groovy 中我可以做 animal."$action"() 或 def animal; animal.action() ,而不是 Animal animal = new Dog(); 动物.action()。我可以在 Open-Closed 原则的上下文中看到问题,但还有其他原因更喜欢 OO 风格的多态性吗?
我什么时候应该在 groovy 中使用接口(如果有的话)?
我确信还有一些其他类似的困境我没有写下来。我还认为这些问题不仅适用于 groovy,而且适用于任何其他动态语言。你有什么意见?