为什么基于注解的库在 Scala 中不那么流行?
Why annotation based libraries are not so popular in Scala?
当我编写 Java 代码时,我发现基于注释的库非常流行,例如hibernate
、Jackson
、Gson
、Spring-MVC
。但是在 Scala 中,大多数流行的库都没有提供注释,或者提供但推荐非注释方法,例如squerly
、slick
、argonaut
、unfiltered
等
有时,我发现注释更易于阅读和维护,但为什么人们对它们不那么感兴趣?
宏和隐式通常可以用作注释的替代品,并具有静态检查的好处。
一个原因是通常必须在声明位置使用注释。因此,您必须 "pollute" 使用与您的业务逻辑无关的代码来构建域模型。另一方面,基于宏或类型 类 的解决方案通常应用于使用现场。这允许您的域模型具有更高的可重用性。
例如,如果您需要针对不同的任务使用不同的序列化逻辑怎么办?对于注解,您通常别无选择,只能使用修改后的注解实现模型的附加表示。使用类型 类(可能通过宏自动派生),您只需实现另一个实例并根据您的需要注入它。
当我编写 Java 代码时,我发现基于注释的库非常流行,例如hibernate
、Jackson
、Gson
、Spring-MVC
。但是在 Scala 中,大多数流行的库都没有提供注释,或者提供但推荐非注释方法,例如squerly
、slick
、argonaut
、unfiltered
等
有时,我发现注释更易于阅读和维护,但为什么人们对它们不那么感兴趣?
宏和隐式通常可以用作注释的替代品,并具有静态检查的好处。
一个原因是通常必须在声明位置使用注释。因此,您必须 "pollute" 使用与您的业务逻辑无关的代码来构建域模型。另一方面,基于宏或类型 类 的解决方案通常应用于使用现场。这允许您的域模型具有更高的可重用性。
例如,如果您需要针对不同的任务使用不同的序列化逻辑怎么办?对于注解,您通常别无选择,只能使用修改后的注解实现模型的附加表示。使用类型 类(可能通过宏自动派生),您只需实现另一个实例并根据您的需要注入它。