У меня есть приложение, в котором все объекты расширяют абстрактный класс, который определяет такие методы, как create()
edit()
retrieve()
и delete()
.Поскольку каждый из дочерних классов использует одну и ту же логику для этих функций, абстрактный класс определяет это поведение по умолчанию, и в тех немногих случаях, когда его необходимо дополнить, дочерние классы могут переопределять или использовать встроенные мной хуки.
Теперь у меня возникла ситуация, когда некоторые дочерние классы необходимо сделать неизменяемыми, то есть у них не должно быть методов edit()
или delete()
.Это звучит для меня как работа для интерфейса с именем что-то вроде immutable
, которое могут реализовывать неизменяемые классы.Проблема в том, что интерфейсы не мешают вызову методов, они просто обеспечивают существование метода.Так что это, очевидно, не сработает.
Создание двух родительских классов, одного для изменяемых объектов и одного для неизменяемых, является уродливым и, вероятно, вызывает проблемы в будущем, связанные с обслуживанием.Я мог бы сделать так, чтобы неизменные объекты переопределяли методы-нарушители с помощью пустого метода, который ничего не делал, но это также кажется грязным и, как будто я не делаю правильный ООП в этот момент.способ позволить большому набору классов всем наследовать набор методов, но для некоторых из них не наследовать все методы?(Рассматриваемое приложение написано на php, но общие методы ООП на любом языке могут быть полезны).