Конкретные методы в интерфейсных классах

Я строю некоторые классы (в PHP, хотя этот вопрос распространяется и на другие языки ООП), которые хранят информацию из базы данных. Поэтому я хочу создать интерфейс: «синхронизируемый».

interface syncable{
protected function _pushToDB();
protected function _pullFromDB();
}

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

protected $sync = 0;

public function sync(){
if($this->sync == 0){
// DB in sync with class; Do nothing.
}
if(this->sync == 1){
$this->_pushToDB();
$this->sync = 0;
}
if(this->sync == -1){
$this->_pullFromDB();
$this->sync = 0;
}
}

Когда переменные изменяются в реализованном классе или база данных обновляется в другом месте, переменная $ sync обновляется, чтобы должным образом отражать необходимый тип синхронизации, тогда в какой-то момент может быть вызван sync (), который, в свою очередь, вызывает соответствующий реализованный метод. Хотя _pushToDB () и _pullFromDB () очень специализированы для каждого класса, sync () останется неизменным между большинством, если не всеми классами.

Поскольку классы, реализующие «syncable», такие как «users», «foo» и «bar», не имеют реального отношения к «syncable» и могут нуждаться в расширении других классов, «syncable» должен быть интерфейсом, а не абстрактным классом.

Итак, мой вопрос: как лучше всего это сделать? Должен ли я скопировать и вставить мою функцию sync () в каждый класс, который реализует «syncable»? Создаю ли я абстрактный класс и надеюсь, что никакой класс, расширяющий «syncable», никогда не будет нуждаться в расширении чего-либо еще? (Поскольку PHP и многие ООП не поддерживают множественное наследование) Есть ли какое-то другое решение PHP, которое бы лучше подходило для этой ситуации? Существуют ли общие решения ООП для этой проблемы?

0

Решение

Вы должны взглянуть на php traits, вы можете создать эти черты и затем использовать их там, где вы хотите / нуждаетесь в них, является частью принципа множественного наследования:

http://php.net/manual/en/language.oop5.traits.php

3

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

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

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