2017-02-09 5 views
4

Так что я в ситуации, когда хочу иметь базу данных объектов, содержащих классы для запуска. Это будет выглядеть примерно так:Без отражения можно определить класс для запуска

id | Description  | pricingClass 
1 | "static pricing" | staticDeliveryPrice.class 
2 | "Dynamic pricing" | dynamicDeliveryPrice.class 

Целью этого является обеспечение гибкости в моем кодировании. Моя мысль состоит в том, что это позволит использовать несколько способов определения того, как определить цену метода доставки.

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

+1

Почему бы не создать базовый класс DeliveryPrice и иметь классы DynamicDeliveryPrice и StaticDeliveryPrice, расширяющие его, чтобы реализовать свой собственный метод доставки. то все, что вам нужно - это структура данных, содержащая объекты DeliveryPrice, на которые вы вызываете тот же метод. почему вся работа по отображению типов объектов в строку/класс? –

+1

Отражение не плохо. Используйте его, если вам это нужно. – ZhongYu

+0

@RAZ_Muh_Taz Я планирую, чтобы весь мой класс доставки использовал интерфейс для предопределения методов. Но должен ли мне по-прежнему нужен мой ценовой объект, чтобы определить, какую цену доставки он использует? – Harry

ответ

7

Вы описываете архитектуру с плагинами. Вам действительно нужна такая гибкость? Обычно это необходимо, когда:

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

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

Кроме того, это не очень хорошая вещь, чтобы поместить бизнес-логику в базу данных: вы смешиваете проблемы, вы создаете сильную связь (внезапно переименование классов станет раздражать!), И, конечно, сложнее рассуждать о том, что происходит в ваш код, просто глядя на него.

+0

Спасибо за отзыв. Я рад, что вы написали, почему это было необходимо, потому что это действительно подтверждает то, что я пытаюсь сделать. В моем пользовательском сценарии я хотел бы иметь возможность во время выполнения изменить способ доставки, а также позволить другим «клиентам» указывать точные затраты и то, как программа взаимодействует с продуктом. – Harry

Смежные вопросы