Wikibase
MediaWiki Wikibase extension
|
accepted
The Wikibase REST API supports various endpoints related to getting and updating Item data. It is now going to be extended to cover not only Items but also Properties. This raises a question regarding the approach to be taken: should we reuse the existing use cases and domain services by finding suitable abstractions that work for both Items and Properties, or should we create separate ones for Properties, accepting some code duplication between similar classes for Items and Properties?
As an example, consider the ItemPartsRetriever
domain service:
Re-using this service would require converting it into an EntityPartsRetriever
, which takes an EntityId
as input and returns generalized Entity
data, covering both Item
and Property
. In contrast, a separate domain service for Property
would leave the ItemPartsRetriever
untouched and provide a new getPropertyParts
method, that expects a PropertyId
as an input parameter.
More such use cases and domain services exist for accessing and updating Item labels, descriptions and aliases.
We have decided to create new use cases and domain services for Properties, similar to the Item specific ones. This way we avoid ambiguity and ensure clear inputs and outputs for both Items and Properties.
By creating Property equivalents of the Item specific services, we ensure that the code and functionality related to Items and Properties remain separate and unambiguous. This approach allows us to handle the unique characteristics of each entity type effectively. Although it results in some code duplication between similar use cases for Items and Properties, it helps maintain clarity and reduces the potential for errors or confusion.