Я застрял с общей проблемой ООП и не могу найти правильный способ сформулировать мой вопрос.
Я хочу создать класс, который даст мне объект, который я могу написать один раз, сохранить его в хранилище и затем не смогу изменить свойства. (например: информация о счете-фактуре - после записи в хранилище она должна быть неизменной). Не вся информация доступна сразу, в течение жизненного цикла объекта информация добавляется.
Чего я хотел бы избежать, так это исключения, возникающие из-за сеттеров при попытке написать, потому что такое чувство, что вы предлагаете контракт, который вы не намерены соблюдать.
Вот некоторые идеи, которые я рассмотрел до сих пор:
- Передать любую запись-информацию в конструкторе. Конструктор выдает исключение, если данные уже присутствуют.
- Создание нескольких классов в дереве наследования, где каждый класс представляет сущность на некоторой стадии ее жизненного цикла, с соответствующими установщиками, где это необходимо. Добавьте коллективный интерфейс для всех операций чтения.
- Молча отбрасывает любые неуместные записи.
Мои мысли по этому поводу:
1. Делает конструктор крайне нестабильным, как правило, плохой идеей.
2. Взрыв сложности и не решает проблему полностью (вы можете вызывать сеттер два раза подряд, в пределах одного запроса)
3. Легко, но та же проблема, что и с исключениями; все это большой обман по отношению к вашим клиентам.
(Только к вашему сведению: сейчас я работаю в PHP5 - хотя я подозреваю, что это общая проблема)