From: Victor B. <vb...@gm...> - 2008-01-30 07:55:04
|
Hi John, and all, I have been playing with the latest plugin infrastructure to implement a sample plugin (actually a Twitter clone to be used inside Mantis within a team). The aim of this is mainly to verify the infrastructure and to help fine tune it before it is out in the wild. So far it seems that functionality we are on the right track. However, with our move to PHP5, I am thinking we can make better use of object oriented features that are available to us. Typically common patterns for extensibility in non-scripting / Object Oriented language typically uses inheritance or reflection. Given that these two features are available to us in PHP 5, hence, I guess we should give then a closer look. The old model of extensibility of Mantis is as follows: 1. Construct a dynamic function name. 2. If function exists call it. 3. If doesn't exist, do something else (default behavior or nothing) This model is used in custom functions and extensibility for integration with wiki engines. In the plugins, we look for functions like plugin_callback_<plugin_name>_info() or whatever the function is. This makes it hard for plugin developers to discover all the methods they can implement. Hence, more need for detailed and in-sync documentation. I am thinking of a model that looks as follows: class MantisPluginBase { function Init() {}; Hook() {}; abstract GetInfo(); GetSchema() {}; GetConfig() {}; Install() {}; Upgrade() {}; Uninstall() {}; } The idea is to have an abstract class. The abstract class will have a 1 or more abstract functions (must be implemented by derived classes) and some default methods. The reason I am suggesting an abstract class rather than an Interface, is that if we use an interface and add methods to it in the future, then all existing plugins will break, even if the new method is optional. >From now on, I think we need to re-examine patterns that were used in 1.1.x and before, and see whether we want to go forward with them in 1.2.x and later. See the following section in PHP manual for PHP 5 OO features: http://us3.php.net/manual/en/language.oop5.abstract.php Regards, Victor |