我很高兴地宣布,一款新的维基数据库图书馆:Wikibase数据模型服务(我将在本文中称之为DMS)。
图书馆背后的原理
引入这个新库的主要动机是减少技术债务,并在Wikibase代码中划定更坚实的架构边界。
在Wikibase项目开始时,我们将所有代码都保存在Wikibase.git存储库中。这可以细分为三大部分:Wikibase Repository(MediaWiki扩展)、Wikibase Client(MediaWiki扩展)和Wikibase Lib。后者用于保存Wikibase Client和Wikibase Repository所需的代码。虽然表面上这是一个合理的想法,但不幸的是,很多事情都可能出错。代码中没有创建真正的边界,导致了一个紧密耦合的blob,它甚至包括Wikibase Client和Wikibase Repository上的全局状态和循环依赖关系。对于应该或可以进入Wikibase Lib的内容,也没有签订合同。只添加了一个MediaWiki扩展所需的内容,因为它们在其他地方可能有用,而在其中一个扩展中保留了类似的代码。
项目进行大约一年后,我们意识到事情正朝着错误的方向发展。尽管在问题的严重程度上存在一些分歧,但随着时间的推移,消除Wikibase Lib的共识出现了。第一步是提取Wikibase数据模型这导致movedout代码的质量大大提高,远远超过了剩下的代码。这为创建其他组件(例如Wikibase DataModel序列化它取代了一大块Wikibase Lib代码。不幸的是,WikibaseLib中的许多代码并不属于像序列化组件那样具有内聚性的整体。这导致这样的代码没有被移出,实际上,随着时间的推移,许多新类被添加到Wikibase Lib中,这几乎否定了提取工作。
考虑到人们引入Wikibase Client和Wikibase Repository所需的新代码所面临的困境,这并不难理解。它要么需要进入Wikibase Lib,要么需要进入依赖关系图下面的组件,比如Wikibase DataModel。我当然已经在Wikibase DataModel中添加了几个类,因为这似乎是当时放置它们的最佳位置,并且使用了与DataModel相关的服务来污染此组件,但这些服务并不需要定义数据模型本身。第三个代码被错误地发现的地方是MediaWiki扩展本身。处理域逻辑或其他独立于应用程序的代码最好避免框架绑定。
所有这些都建议在Wikibase DataModel和MediaWiki扩展之间创建一个新库。一个库,用于收集无法为其创建内聚组件或创建不合理的功能。一个问题马上浮现出来:这个新的通用图书馆会不会像Wikibase Lib一样成为一个垃圾场和一团烂泥?为了避免任何此类命运,我们仔细定义了在允许代码进入组件之前必须满足的需求代码。此类代码必须…
- 正在使用Wikibase DataModel
- 不属于更特定的组件(例如序列化组件)
- 不向该组件引入严重依赖项(数据库、框架、大型库等)
- 不是演示代码
当前状态:Wikibase DataModel Services 1.1
第三方对这个库特别感兴趣,因为它可以重用以前绑定到Wikibase客户端和Wikibase存储库MediaWiki扩展的代码。以下列表包含新可用的类和接口:
DataValue\ValuesFinder
实体\实体预取器
实体\实体重定向ResolvingDecorator
实体\NullEntityPrefetcher
EntityId\ EntityId格式设置工具
EntityId\ EntityId标签格式设置工具
EntityId\ EscapingEntityId格式设置工具
EntityId\PlainEntityId格式设置工具
实体Id\后缀实体IdParser
查找\实体查找
查找\实体重定向查找
查找\实体检索数据类型查找
查找\实体检索Term查找
查找\标签描述查找
查找\语言标签描述查找
查找\术语查找
语句\语句GuidValidator
Tern\属性标签解析程序
术语\术语缓冲区
这些都是从Wikibase Lib中删除的。DMS还包含以前存在于Wikibase DataModel中的代码,并在版本4.0中移出:
- 中的实体差异和修补功能
服务\差异
实体IdParser
和中的基本实现服务\实体ID
ItemLookup(项目查找)
,属性查找
和属性数据类型查找
接口
- 中的语句GUID分析器和生成器
服务\声明
按PropertyIdGrouper
走向未来!
我们从Wikibase Lib中迁移的大约20个类和接口只是一个开始。我们正在采取增量方法来移动代码,以避免需要维护两个副本,并将更改从Wikibase Lib同步到其移动的副本。因此,在不久的将来可能会发布具有附加功能的新版本。
与其他Wikibase库,贡献是非常受欢迎的,并且可以在没有太多设置工作或需要了解整个代码库的情况下完成。您可以在其README文件。与库用户相关的更改总是在发布-注释.
帖子视图: 12,894
相关的