Stakeholder(s):
- MediaWiki developers (core and extensions) will benefit from clearer, more testable code
- Extension developers (in WMF and elsewhere) will have more control over the behavior of pages their extension manages.
- Quality + test engineering may be interested since we are making code more testable by removing special cases throughout the code base
|
Problem:
- Special behavior for each kind of page (e.g. articles, file pages, categories, talk pages, user scripts, etc) is hard coded in various places across the code base.
- WikiPage acts as a root of a class hierarchy that mirrors the one rooted in Article
- The Article base class is huge, implementing behavior for several different UI actions
- Extensions cannot easily define new kinds of pages. They have to use hooks to modify the behavior of existing kinds of pages.
|
Solution:
- Define special behavior for each kind of page (e.g. articles, file pages, categories, talk pages, user scripts, etc) in subclasses of Article.
- Remove the WikiPage hierarchy
- Extract action handling code from Article into Action classes.
- Create a registry system for page types, allowing extensions to register their own.
|
Aligned Goals:
- Improve code quality by reducing coupling
- Improve code health by improving testability
- Improve maintainability by modeling domain concepts clearly
|
Success Metrics:
|