Отражение - определить метод вызова и параметры из значения БД - PullRequest
0 голосов
/ 08 ноября 2011

Я разработал простую систему POS, которая получает список продуктов и кнопок из БД. Таблица, содержащая все кнопки, предоставляет всю информацию, которая нам необходима для рисования кнопки (то есть: размер, положение, метка, цвет и к какому артикулу она относится).

В оригинальной версии все «функциональные» кнопки были жестко запрограммированы (т. Е. Цифры 1–9, оплата, изменение ценовых уровней, окончание смены и т. Д.), Но я хочу перейти к более настраиваемому дизайну, чтобы эта функция кнопки также могут быть сохранены в базе данных.

Я хотел сделать это с помощью чего-то, основанного на отражении. У меня есть класс, чтобы действовать как интерфейс, содержащий все методы, которые появятся в БД, которые затем будут вызывать любой из необходимых методов в системе. Но я не уверен, как сопоставить это с БД.

Я почти уверен, что каждый метод будет принимать 0, 1 или 2 параметра, которые имеют комбинацию логических, int, double и char.

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

paySale[]

в базе данных, но если клиент дал мне 50 долларов, и я хотел бы использовать кнопку «быстрые деньги», то вызов метода будет

paySale[d 50]

или что-то более сложное, например, оплата чеком

paySale[i 3, d 50]

где int - тип метода оплаты (в данном случае это будет чек), а double - общая сумма.

Моя проблема в том, что когда я пытаюсь получить метод с помощью getMethod (), я не могу понять, как определить, какие параметры искать, например, double.class и int.class

Будет несколько различных методов, которые нужно будет вызывать для обработки таких вещей, как изменения уровня цен, конец смены, оплата счетов / вкладок и т. Д., Так что если есть более простой способ сделать это, тогда я открыт к этому!

Еще раз спасибо, ребята!

Ответы [ 2 ]

1 голос
/ 08 ноября 2011

Я с AlexR на этом.

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

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

1 голос
/ 08 ноября 2011

Используйте что-то вроде

class.getMethod(int.class, double.class, String.class) и т. Д. Если ваш метод не является общедоступным, используйте getDeclaredMethod().

Но, честно говоря, ваше решение звучит странно.Насколько я понимаю, вы на самом деле сохраняете в БД вид скрипта, а затем запускаете его.Если это так, используйте готовый к использованию скрипт-движок.Например, Java 1.6 и выше имеет встроенный интерпретатор JavaScript (см. ScriptEngineManager).Вы можете генерировать javascript и затем запускать их.Это гораздо проще, чем создавать очень ограниченный интерпретатор сценариев самостоятельно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...