Скажем, у меня есть ниндзя с определенными настраиваемыми навыками.Под настраиваемым я подразумеваю, что программа считывает файл конфигурации и добавляет их во время выполнения.т.е.:
Ninja:
color: Red
Skills:
- High Jump
- Invisibility
Теперь предположим, что эти навыки необходимы для динамического добавления функциональности в класс ниндзя.Например, если мы сконфигурируем Ninja для получения навыка High Jump, то класс должен следовать интерфейсу CanHighJump с открытым void highJump () в качестве метода.
Теперь есть два способа, которыми я могу подумать о переходеоб этом.Моя первая реакция будет иметь класс Ninja с цветом String, а затем использовать Reflection, чтобы добавить функциональность.Однако теперь я понимаю, что могу сделать это и через реляционную базу данных.Возьмите класс ниндзя с цветом String и забудьте о любых объектах, связанных с ниндзя с навыками - вместо этого, когда мне нужно проверить навык, просто позвоните в базу данных, чтобы найти возможные навыки, которые может использовать класс.Это только два действительно динамичных решения, которые я могу придумать, и я не могу понять плюсы и минусы каждого из них.У меня есть ощущение, что решение для базы данных будет гораздо более масштабируемым, но метод отражения будет наиболее целесообразным для меня при кодировании.Не нужно спрашивать, какими навыками обладает ниндзя, потому что я легко могу проверить интерфейс.
Я надеюсь, что кто-нибудь может дать мне некоторое представление о стандартном решении для решения этой проблемы.Будь то один из двух, которые я придумал, или, скорее, что-то, о чем я не думал.