class — PHP классы: аннотация, черты, расширение, интерфейс, синглтоны

У меня был очень длинный класс «Плейлист»; наличие функций, которые, помимо прочего, обрабатывали бы кеш списка воспроизведения, переменные и пресеты.

class Playlist{

var $cache;
var $variables;
var $preset;

function __construct(){
$this->cache = populate_cache();
$this->variables = $this->populate_variables();
$this->preset = $this->populate_preset();
}
function populate_cache(){
}
function populate_variables(){
}
function populate_preset(){
}
}

Поскольку читать стало очень трудно (много функций для вещей, связанных с кешем, переменными, пресетами), я начал разбивать их на несколько классов (код здесь сокращен):

class Playlist{

var $cache;
var $variables;
var $presets;

function __construct(){
$this->cache = new PlaylistCache($this);
$this->variables = new PlaylistVariables($this);
$this->presets = new PlaylistPreset($this);
}
}

class PlaylistCache{
var $playlist;
function __construct(&$playlist){
$this->playlist = $playlist;
}
}

class PlaylistVariables{
var $playlist;
function __construct(&$playlist){
$this->playlist = $playlist;
}
}

class PlaylistPreset{
var $playlist;
function __construct(&$playlist){
$this->playlist = $playlist;
}
}

Таким образом, объект Playlist передается каждому «подклассу». Если я хорошо понял, это называется Внедрение зависимости. Я не уверен, что это очень умно, так как

  • Это кажется мне довольно странным способом кодирования.
  • Он производит рекурсии в моем коде, например. объект списка воспроизведения передается в класс PlaylistCache; но PlaylistCache определен в объекте playlist, что делает … неприятный цикл. Если я напечатаю свой объект Playlist, я увижу RECURSION написано в коде.

НО мне нужно иметь доступ ко всему объекту Playlist через каждый подкласс, и это единственный способ, который я нашел на данный момент.

Я уже знаю о расширение классов, но я не хочу расширять свой класс здесь: кеш, переменные и пресеты — это не другой вид списка воспроизведения, это «свойства», которые должен заполнять мой список воспроизведения.

Я немного вырыл и прочитал о Абстрактные классы, Черты, Интерфейсы, и я думаю, что мое решение где-то в этом. Но я не могу найти где, и мне довольно трудно понять, потому что это действительно абстрактно, и английский не мой родной язык.

Итак: кто-нибудь понимает, что я имею в виду и есть предложения?
Спасибо !

1

Решение

Некоторые комментарии вводят в заблуждение. «Дочерние» классы используют внедрение зависимостей, а не наследование родительских / дочерних отношений. Однако, класс playlist (родительский) использует композицию.

&в конструкторы составляютпередача по ссылке». Чтобы передать по значению, класс должен методы доступа. Если вам нужен только один экземпляр скажем … текущий плейлист, одиночка имеет смысл. Черты являются решением для вставки копий — дизайн для шаблона синглтона может быть размещен в виде черты, но использование синглтона не будет.

Подумайте, что классы списка воспроизведения * действительно нужны из списка воспроизведения, и рассмотрите возможность передачи этих значений явно.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]