Добавить динамически методы к объекту

1

Не могли бы вы помочь мне найти решение моей проблемы?

У меня есть класс, который представляет сущность (я назову его "Entity"). Я хотел бы динамически добавлять методы к моему Entity в соответствии с разными критериями.

Например:

Если $_POST['TYPE'] == 'typeA', я бы хотел добавить следующие методы:

  • метод1()
  • метод2()
  • method3()
  • method4()

Если $_POST['MODE'] == 'modeA', я бы хотел добавить следующие методы:

  • method5()
  • method6()
  • method7()

Проблема в том, что будет много возможных методов, и если я добавлю все из них в свой класс, я боюсь, что мой класс станет слишком большим. Я также хотел бы избежать редактирования моего класса каждый раз, когда возникает новая ситуация.

Я сначала подумал о том, чтобы иметь класс в каждом случае, но у меня слишком много случаев (около 5 критериев и для каждого из 6 или 7 возможных разных значений), что составляет примерно 50 или 60 различных случаев в полном объеме.

Итак, какое лучшее решение для этого?

Должен ли я добавлять все возможные методы в мой класс?

Должен ли я использовать наследование и создавать все возможные типы объектов (Type1Mode1Entity, Type1Mode2Entity,...)?

Знаете ли вы шаблон дизайна (декоратор?), Чтобы сделать это?

Бен

Теги:
oop
design-patterns

1 ответ

3
Лучший ответ

Создайте отдельные классы для ваших случаев, которые расширяют абстрактный класс с помощью общих методов, затем используйте заводскую DP для загрузки требуемого класса

  • 0
    Спасибо, Auris, я также колебался, чтобы создать новый класс в каждом конкретном случае, но у меня есть много разных случаев (около 8 разных $ _POST ['type'], 5 разных $ _POST ['mode'] и 3 или 4 других критерия. и у меня должно быть около 50 или 60 дел в полном объеме), поэтому при необходимости я постараюсь устранить бесполезные дела (если смогу), но, и я надеюсь, что вы меня понимаете, я бы предпочел другое решение
  • 0
    вам, вероятно, потребуется немного абстрагировать свою структуру и разбить ее на группы дел, поэтому вы хотите создать небольшую библиотеку вместо одного класса, чтобы обрабатывать их все. Но это то, что ООП это все. как только вы создадите свою структуру Entity (которая для такого случая, как ваш, вероятно, будет больше похожа на дерево, чем на плоский набор классов), все, что вам нужно будет сделать, это написать фабричный класс, который возвращает правильный объект. Добавление методов к объектам невозможно, вы можете загружать объекты только в объекты, но это очень грязный подход, а использование фабрики - намного более чистый подход.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню