Я пытаюсь принять решение о разработке системы, которая должна обеспечивать большую степень расширяемости. Из того, что я могу сказать, шаблон, такой как абстрактная фабрика, не позволял бы переопределять базовые методы, кроме дублирования кода (как показано ниже).
Я провел некоторые предварительные исследования в аспектно-ориентированном программировании, и, похоже, это соответствует тому, что я ищу, но мне трудно обдумать детали.
abstract class Object {
protected $object_id;
protected $name;
function LoadObjectData()
{
$file_contents = readfile('object'.$object_id.'.data');
$data = array();
// parse file contents into $data array...
return $data;
}
function Create()
{
$data = $this->LoadObjectData();
$name = $data['name'];
return $data;
}
}
class User extends Object {
protected $email_address;
function Create()
{
$data = parent::Create();
$this->email_address = $data['email_address'];
return $data;
}
}
//----------Module 1-MySQL Lookup-------------
/*
* Redefine Object::LoadObjectData() as follows:
*/
function LoadObjectData()
{
$data = array();
$result = mysql_query("SELECT...");
// construct array from result set
return $data;
}
//----------Module 2-Cache Machine-------------
/*
* Redefine Object::LoadObjectData() as follows:
*/
function LoadObjectData()
{
if (exists_in_cache($object_id)) {
return get_cached_object($object_id);
}
$data = parent::LoadObjectData();
cache_object($object_id, $data);
return $data;
}
(Это плохой пример, но, надеюсь, это поможет донести мою мысль)
Предполагаемая система будет иметь очень большую долю доступных методов для расширения, и я хотел бы минимизировать дополнительные усилия и обучение, необходимые для разработчиков.
Является ли АОП именно тем, что я ищу, или есть лучший способ справиться с этим?
Спасибо!