On 17 May 2013 16:57, Denny Vrandečić denny.vrandecic@wikimedia.de wrote:
Hey,
in order to sanity check the code we have written in the Wikidata project, we have asked an external company to review our code and discuss it with the team. The effort was very instructional for us.
We want to share the results with you. The report looks dauntingly big, but this is mostly due to the appendixes. The first 20 pages are quite worth a read.
I read half of the report. Here is what I got out of it:
* We should do dependency injection to make code testable * We should adhere to the single responsibility principle to make code testable and less complex * MediaWiki in many places (special pages, api, hooks to name few) makes it impossible or at least very hard to do the above for most classes
They proposed a solution (work around in Wikibase) to allow writing better code in Wikibase. In section 4.1.6 it reads "The sketched approach fulfills all presented requirements: The dependency injection mechanism is kept simple and easy to understand". But as a reader I did not understand how it works or what would be the practical gains for the code complexity that the solution itself introduces. I would attribute some part of this to the many typos, mistakes and non-fluent language in the text and examples. One example:
"For example, if the a DependencyManager as configured in Illustration 1: DependencyManager is asked to retrieve the object with the key “mail”, it will ask the registered DatabaseBuilder to create that object and return it."
I am curious whether there was any discussions if and how these issues could be fixed in MediaWiki core? Or do we need[1] to figure that out on our own?
[1] I see that I already jumped on the "how to get there" part, but I guess I should first ask: is there sufficient mass that thinks there is an issue and that the issue should be fixed? I think that there is definitely a need for core to adopt better coding practices to reduce code complexity and allow easier unit testing. Just like the move from svn to git and gerrit, it will need a lot of effort and can annoy people, but in the end we will be better than before.
-Niklas
-- Niklas Laxström