В последние несколько месяцев я делаю переход с Java на Groovy, и я могу оценить многие преимущества, которые он приносит: меньше кода, закрытий, сборщиков, MOP, что в конечном итоге делает платформу, такую как Grails, насмехаясь при написании тестов и т.д.
Однако мои коллеги были "обвинены" в том, что мой код не является Groovy достаточно. А именно, я все еще объявляю типы для своих параметров и полей, как правило, использую наследование и полиморфизм вместо утиного ввода текста и т.д. Мне кажется, что в этих ситуациях это не только динамическая или статическая, но и динамическая или объектно-ориентированная парадигма вид дилеммы. В тех случаях я все же предпочитаю ОО. Я чувствую, что парадигма ОО имеет большую ценность в своей основной предпосылке, позволяя вам абстрагироваться и связывать ваши конструкции кода с конкретными концепциями реального мира.
Итак, вот конкретные вопросы, которые мне нужны для помощи:
-
Должен ли я объявлять типы для моих параметров, полей и т.д.?
-
Должен ли я объявлять блок кода как закрытие, когда будет выполняться простой метод?
-
Когда следует использовать утиную печать вместо полиморфной динамической отправки. Например, в Groovy я могу делать животное. $Action "() или def animal; animal.action(), а не животное animal = new Dog(); animal.action(). Я вижу проблему сперва в контексте принципа Open-Closed, но любые другие причины предпочитают полиморфизм стиля OO?
-
Когда я должен использовать интерфейсы в Groovy (если когда-либо)?
Я уверен, что есть и другие подобные дилеммы, которые я не смог записать. Я также считаю, что эти вопросы действительны не только для groovy, но и для любого другого динамического языка. Каково ваше мнение?