经常有新人问anyline好用吗,首先这个问题问的就过于宽泛。回答这个问题要分场景。
在传统项目开发中,anyline是不太方便的,其核心思想之一是推荐去O(实体类),这就导致了编辑器不能自动补齐代码,会让一些开发人员很不习惯,因为实现开发中有许多属性名是很长的,特别是遇到一些拼音首写的列(表情包)。
anyline的初衷应该是想为动态项目提供底层支持,在动态场景中,如低代码、数据中台、自定义查询、动态报表、可视化数据源、异构数据库迁移同步等anyline展现了其天然的动态优势,因为没有O,就不需要提前编辑大量实体类,可以在运行时借助强大的元数据管理(service.metadata())实现动态SQL的构造。同时通过DataSet/DataRow组合实现数据结构的统一操作。别小看这个DataSet/DataRow其内部包含了几乎所有的数学计算公式及批量操作方法,在数据清洗场景中会节省掉70%以上的机械的遍历、判断、数学计算等工作量。想像一下通过List<Entity>的数据结构在动态场景中会需要多少啰嗦的反射、遍历、判断、计算。
另外动态数据源也是许多开发人员选择anyline的重要原因,在中台类项目中数据源通常是在运行时由用户随机提供的,而且经常会出现同一个方法内部多个数据源来回切换的需求,这使得传统的ORM显得非常乏力。anyline提供了7种方式注册数据源3种方式切换数据,可以实现任意环境下数据源的灵活管理。当然由于太过于灵活导致许多开发人员不知道应该选择哪种方式。
各种数据库方言的兼容也是anyline的很炸裂功能,他的兼容不仅限于DQL。也包含DML/DDL/metadata(元数据)/authorize(权限),不限于关系型数据库也包含非关系型(document、event、graph、kv、object、rdf、search、spatial、timeseries、vector、wide column等10几类上百个数据库)除了几个常用的关系型数据库、图数据库、时序库、向量库,更重要的是适配了大量的国产数据库,因为大分部我都没有见过不好评论。
阅读了一下anyline的源码明显感觉到他的发起人及核心架构师在技术上相对保守,大部分代码基本上是在JDK8环境中实现的,极少见JDK17/21的新特性,甚至连JDK8的lambda表达式都没有。但其设计思想却相当激进
- 剥离了spring依赖,作为一个Java程序员这是很难想像的
许多开发人员工作第一天可能就是从接手一个spring项目开始的,甚至都分不清什么是Java什么是Spring,一个普通的程序员很难去接受一个脱离了spring的项目,毕竟工作中大部分都是spring,但不得不说许多场景中确实不需要spring太臃肿了。 - 除了Java,没有基于什么其他ORM框架,历史包袱全卸掉,直接另起了一个炉灶新开一派。
与1相同,这对从小在SSM环境中长大的程序员来说也是很难接受
从小就被教育不要重复造轮子,这点确实让人很想不明白,因为没有基础依赖导致了许多代码要从头实现,工作量暴涨,可能是因为与其他框架有着方向性的差异,不得以而为之。 - 直接干掉了ORM中的O(当然也可以有)
前文解释过了没有O编码工作别扭了不少。
可以看出anyline并不针对常规的项目,而且看他的群里也并不多见普通的业务开发程序员。大多是一些开源作者、底层架构设计、通用工具开发人员。
回到开头的问题anyline好用吗,回答这个问题前一定要先搞明白自己的项目是什么类型。如果只是作个网站、开发个ERP之类的常规项目,要慎重,虽然在你熟悉了anyline的情况下会对编码效率和质量会有帮助,但这不是必须的,更要考虑团队其他成员能否适应这种模式。如果是动态场景中,那就不是好不好用的问题了,而是没有第二个选择,否则干到最后你会发现,自己把anyline的活又干了一遍。