Перемещение строк в отдельный файл — хорошая идея! Он удерживает их вместе и позволяет легко менять их при необходимости. В вашем вопросе не говорится, что вы хотите иметь возможность их переводить, но централизация поможет в этом.
Но код типа:
Messages.Add(sMsgText1 + '' + sName + '' + sMsgText2 + '' + sFullPath)
не лучше, чем такой код:
Messages.Add('The voucher was NOT sent to ' + sName+
' because the application is in TEST MODE.');
Вы превратили беспорядочный, но понятный вызов функции в беспорядочный и непонятный вызов функции. Со старым кодом (второй фрагмент чуть выше) вы можете прочитать код и примерно увидеть, что будет сказано в сообщении, потому что большая часть этого находится в тексте. С новым кодом нельзя.
Во-вторых, причина перемещения строк, чтобы сохранить связанные элементы вместе и упростить их изменение. Что, если вы хотите изменить приведенное выше сообщение, чтобы вместо «Файл 'foo' в пути 'bar'...» оно звучало как «Файл bar\foo is...»? Вы не можете: способ построения сообщений по-прежнему фиксирован и разбросан по всему коду. Если вы хотите изменить несколько сообщений, чтобы они были отформатированы одинаково, вам нужно будет изменить множество отдельных мест.
Это будет еще более серьезной проблемой, если вашей целью является перевод ваших сообщений, поскольку часто перевод требует перефразирования сообщения, а не просто перевода компонентов. (Например, вам нужно изменить порядок подэлементов, включенных в ваши сообщения - вы не можете просто предположить, что каждый язык является фразой для фразы в порядке замены.)
Рефакторинг на шаг впереди
Вместо этого я бы предложил более агрессивный рефакторинг вашего кода сообщения. Вы определенно на правильном пути, когда предлагаете перенести сообщения в отдельный файл. Но не просто перемещайте строки: перемещайте и функции. Вместо большого количества Messages.Add('...')
, разбросанных по коду, найдите общее подмножество создаваемых вами сообщений. Многие будут очень похожи. Создайте семейство функций, которые вы можете вызывать, чтобы все похожие сообщения были реализованы с помощью одной функции, и если вам нужно изменить их формулировку, вы можете сделать это в одном месте.
Например, вместо:
Messages.Add('The file ' + sFile + ' in ' + sPath + ' was not found.');
... and elsewhere:
Messages.Add('The file ' + sFileName + ' in ' + sURL + ' was not found.');
имеют одну функцию:
Messages.ItemNotFound(sFile, sPath);
...
Messages.ItemNotFound(sFileName, sURL);
Ты получаешь:
- Централизованные строки сообщений
- Централизованные функции сообщений
- Меньше дублирования кода
- Более чистый код (без сборки строк в вызове функции, только параметры)
- Легче перевести — предоставьте альтернативную реализацию функций (не забывайте, что простого перевода подстрок может быть недостаточно, вам часто нужно иметь возможность существенно изменить формулировку.)
- Четкое описание сообщения в имени функции, например
ItemNotFount(item, path)
, что приводит к
- Более понятный код, когда вы его читаете
Звучит неплохо :)
person
David
schedule
18.07.2011
const
. - person David Heffernan   schedule 15.07.2011