Стратегия для синхронизации строковых констант между java / flex?

Допустим, у вас есть веб-приложение, в котором есть множество бизнес-правил, построенных на сравнении строковых констант «если-то». Они используются как на стороне клиента, так и на сервере, и на данный момент жестко запрограммированы в обоих местах с большим количеством дублирования, а иногда и с ошибками. Какой разумный способ их реорганизовать? К сожалению, в большинстве случаев они должны существовать, поскольку использование полиморфизма было бы гораздо более отвратительным. Что-нибудь особенное для flex / java? Есть ли простой способ сохранить все эти константы в одном месте и скомпилировать их как в клиентский, так и в серверный код?

Изменить: я действительно ищу способ поделиться строковыми константами между flex и java с проверкой всего во время компиляции. Единственная идея, о которой я могу думать, - это генератор кода.


person gtrak    schedule 09.08.2010    source источник


Ответы (3)


Генерация кода проще, чем вы думаете. Если вы действительно верите в то, что вам нужно сделать, я мог бы привести пример (настраиваемая задача Ant, хотя ее можно запускать как простое основное приложение java), который вы могли бы изменить для своих целей (особенно для строковых констант), если вы хотите.

Если я правильно понимаю, вы ищете что-то, что предоставляет вам "ключевую" проверку во время компиляции (что также даст вам поддержку автозаполнения)? Так что да, файл свойств здесь не очень поможет.

person Manius    schedule 11.08.2010
comment
На самом деле оказывается, что этот код вообще не нуждается в модификации, вам просто нужно настроить константы Java как общедоступную статическую конечную строку (и поместить класс в нужное место). Итак, ваша главная задача - понять, как это работает. Он прокомментирован, но вам может потребоваться некоторое время, чтобы понять его: megaupload.com/?d=8PEPWVZM Может быть, я когда-нибудь сделаю более «формальный» выпуск этого, если кто-то сочтет это полезным. Я всегда думал, что уже есть вещи получше, но никто ничего не предлагает. Дайте мне знать, поможет ли это вообще ... - person Manius; 12.08.2010

Разве и Flex, и Java не поддерживают простые файлы .properties, в которых содержимое этих файлов имеет следующую форму.

key1=value 1
key2=value 2

и так далее...

Так почему бы не определить общий файл .properties и поделиться им между двумя вашими проектами? Здесь также может помочь ваша система контроля версий. Например, если вы использовали svn, вы могли бы просто поместить свои файлы .properties в другой репозиторий и использовать svn: externals, чтобы использовать их как в гибком, так и в java-репозитории.

Что касается загрузки и использования свойств, на следующих страницах показано, как это сделать на каждом языке / платформе:

Для Java: http://www.mkyong.com/java/java-properties-file-examples/

Для Flex: http://vatsalad.wordpress.com/2010/03/12/how-to-use-properties-fileresourcebundle-in-flex/

person whaley    schedule 09.08.2010
comment
но это создает примерно ту же проблему, не так ли? Это решает проблему синхронизации, но теперь мне нужно определить константы в другом классе и загрузить их из файла свойств. Мне все равно придется знать имена свойств в виде жестко закодированных строковых литералов :-). - person gtrak; 10.08.2010
comment
Да, это решает проблему синхронизации и, по крайней мере, получает значения в одном месте. На стороне Java вы можете справиться с частью времени компиляции, полностью избегая этого с помощью чего-то вроде Spring PropertyPlaceholderConfigurer и используя IoC с классами, которым нужны эти значения. Я думаю, что у Guice есть нечто подобное в отношении свойств. Это в значительной степени получает все ссылки на имя / значения свойств из вашего кода и в конфигурацию, и ваш код перестает знать, что они существуют. Что касается Flex, вам придется положиться на кого-то другого, поскольку я утверждаю, что его невежество: D - person whaley; 10.08.2010

Сохраните их в проекте, который распространяется как jar. Вы также можете разместить там все служебные классы, чтобы избежать дублирования кода.

person thelost    schedule 09.08.2010
comment
Интересно, но это не помогает мне повторно использовать их гибкие стороны, не так ли? - person gtrak; 09.08.2010
comment
Конечно! Просто используйте эту библиотеку (содержащую ваши строки) в своем гибком проекте. Аналогичный пример: flexme.wordpress.com/2007/07/11/ интернационализация во флексе - person thelost; 10.08.2010
comment
ах, вы снова предлагаете файлы ресурсов. К сожалению, пары ключ-значение мне не помогают, потому что мне все еще нужно знать имена ключей на flex и java :-). У меня просто разбросана куча строк, на самом деле это не значения чего-то, что можно назвать ключом. Я хочу сказать, что на данный момент у меня есть жестко запрограммированные строки. Если я использую пары ключ-значение, у меня есть жестко запрограммированные ключи, и в результате вдвое больше строк, так сказать, подливается масла в огонь. Косвенное обращение - не совсем то, что я здесь ищу. - person gtrak; 10.08.2010