I'm inclined to accept this RFC, except perhaps with minor changes. It would be nice if I could get some comments on it from someone other than me or Daniel, but if nobody else has anything to say, I will just accept it.
-- Tim Starling On 11/10/13 03:40, Rob Lanphier wrote: > Hi folks, > > I think Daniel buried the lede here (see his mail below), so I'm > mailing this out with a subject line that will hopefully provoke more > discussion. :-) > > This is an RFC we originally conceived at the Hong Kong Wikimania > architecture discussion. The notes from that are here: > https://www.mediawiki.org/wiki/Architecture_guidelines/Meetings/Wikimania_2013#Changes > > There has been discussion on this RFC here, so far only between Tim and > Daniel: > https://www.mediawiki.org/wiki/Talk:Requests_for_comment/TitleValue > > It would be good to get some other voices in that conversation. > > Rob > ---------- Forwarded message ---------- > From: Daniel Kinzler <[email protected]> > Date: Tue, Oct 1, 2013 at 10:18 AM > Subject: [Wikitech-l] RFC: TitleValue > To: Wikimedia developers <[email protected]> > > > [Re-posting, since my original post apparently never got through. Maybe I > posted > from the wrong email account.] > > Hi all! > > As discussed at the MediaWiki Architecture session at Wikimania, I have > created > an RFC for the TitleValue class, which could be used to replace the > heavy-weight > Title class in many places. The idea is to show case the advantages (and > difficulties) of using true "value objects" as opposed to "active records". > The > idea being that hair should not know how to cut itself. > > You can find the proposal here: > <https://www.mediawiki.org/wiki/Requests_for_comment/TitleValue> > > Any feedback would be greatly appreciated. > > -- daniel > > > PS: I have included the some parts of the proposal below, to give a quick > impression. > > ------------------------------------------------------------------------------ > > == Motivation == > > The old Title class is huge and has many dependencies. It relies on global > state > for things like namespace resolution and permission checks. It requires a > database connection for caching. > > This makes it hard to use Title objects in a different context, such as unit > tests. Which in turn makes it quite difficult to write any clean unit tests > (not > using any global state) for MediaWiki since Title objects are required as > parameters by many classes. > > In a more fundamental sense, the fact that Title has so many dependencies, and > everything that uses a Title object inherits all of these dependencies, means > that the MediaWiki codebase as a whole has highly "tangled" dependencies, and > it > is very hard to use individual classes separately. > > Instead of trying to refactor and redefine the Title class, this proposal > suggest to introduce an alternative class that can be used instead of Title > object to represent the title of a wiki page. The implementation of the old > Title class should be changed to rely on the new code where possible, but its > interface and behavior should not change. > > == Architecture == > > The proposed architecture consists of three parts, initially: > > # The TitleValue class itself. As a value object, this has no knowledge about > namespaces, permissions, etc. It does not support normalization either, since > that would require knowledge about the local configuration. > > # A TitleParser service that has configuration knowledge about namespaces and > normalization rules. Any class that needs to turn a string into a TitleValue > should require a TitleParser service as a constructor argument (dependency > injection). Should that not be possible, a TitleParser can be obtained from a > global registry. > > # A TitleFormatter service that has configuration knowledge about namespaces > and > normalization rules. Any class that needs to turn a TitleValue into a string > should require a TitleFormatter service as a constructor argument (dependency > injection). Should that not be possible, a TitleFormatter can be obtained > from a > global registry. > > > > _______________________________________________ > Wikitech-l mailing list > [email protected] > https://lists.wikimedia.org/mailman/listinfo/wikitech-l > > _______________________________________________ > Wikitech-l mailing list > [email protected] > https://lists.wikimedia.org/mailman/listinfo/wikitech-l > _______________________________________________ Wikitech-l mailing list [email protected] https://lists.wikimedia.org/mailman/listinfo/wikitech-l
