Architecture meetings/Wikimania 2013

Meeting at Wikimania 2013.

Agenda
We are developing this document:
 * https://www.mediawiki.org/wiki/Architecture_guidelines

Etherpad for the meeting:
 * https://epl.wikimedia.org/p/ArchitectureHongKong

Best current practices

 * Tim has written about the following and would appreciate review:
 * Interface stability
 * Traditional (encapsulated) OOP
 * YAGNI
 * The following have not be written about, would appreciate ideas:
 * Testing: Do we recommend testing at three levels of integration? Method/class, semi-integrated (e.g. parser tests) and UI automation? Or just some subset of those? Should test coverage be 100% at the narrowest integration level?

Changes
The following changes were proposed in Amsterdam, but were controversial, unresolved, and were not formulated into RFCs:
 * Have everything wrap the HTTP API. https://www.mediawiki.org/wiki/Architecture_guidelines#Separation_of_concerns_.E2.80.94_UI_and_business_logic
 * Separate "value objects" from "service objects". Value objects represent data, but the code that operates on the data is in the service class. https://www.mediawiki.org/wiki/Architecture_guidelines#Separation_of_concerns_.E2.80.94_encapsulation_versus_value_objects
 * Dependency injection. Separate "service bundles" like RequestContext into many small classes and pass each object instance to each service object constructor. https://www.mediawiki.org/wiki/Architecture_guidelines#Use_dependency_injection_for_external_resources

Tim proposed the following change which also has not been fully developed:
 * Have an instance manager for request-lifetime singleton objects, which will be used instead of class-static singletons. This would improve testability.

Other issues with the document:

 * What is missing?
 * How should it be organised?

RFCs to discuss (not resolve):

 * Configuration database
 * Page deletion