2010-04-16 4 views
1

Мне интересно, как другие относятся к попытке централизовать вызов функции MessageBox. Вместо того, чтобы иметь длинный текст, внедренный по всему месту в коде, в прошлом (язык не .net), я бы поместил системные и прикладные базы сообщений типа «messagebox» в файл базы данных, который будет «сгорел» в исполняемом файле, как файл ресурсов в .Net. Когда возникнет побуждая состояние, я бы просто назвать что-то вродеЦентрализация обработки сообщений для приложения

MBAnswer = MyApplication.CallMsgBox (IDUserCantDoThat)

затем проверить MBAnswer по возвращении, например, да/нет/отменить или любой другой.

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

Кто-нибудь имеет подобную систему в .Net, чтобы сделать подобный подход, или это просто плохая идея в среде .Net.

ответ

1

Мы использовали для обработки централизованных сообщений с помощью модулей (VB). У нас был один модуль со всеми сообщениями, и мы называем это в нашем коде. Это было сделано для того, чтобы мы изменили сообщение в одном месте (из-за потребностей бизнеса), и оно находит отражение повсюду. И также было легко обрабатывать изменения в одном файле вместо нескольких файлов для изменения сообщения. Также мы открыли этот файл для бизнес-аналитиков (VSS), чтобы они могли его изменить. Я не думаю, что это плохая идея, если она связана с модулями или статическим классом, но это может быть излишний выбор из БД.

НТН

+0

Это была аналогичная цель - централизовать элементы. Причина в DBF заключалась в том, что я разрабатывал VFP в течение многих лет, и было Чрезвычайно просто записывать таблицу в EXE и запрашивать ее непосредственно на основе идентификатора и иметь все доступные элементы. – DRapp

+0

oh, что имеет смысл: -) ... Наша основная причина заключается в том, чтобы уйти от тестеров, которые просят нас изменить сообщение так много ... lol. Так дал его бизнес-аналитику (у которого в конце проекта было очень мало дел), чтобы исправить это. – Raja

+0

Когда вы упомянули об этом с модулями ... Вы имеете в виду, что у вас был класс всех различных вызовов в виде сообщений, которые МОЖЕТ ЗАНИМАЕТСЯ в системе (или подсистеме, если подмодули)? И в каждом отдельном методе будет содержаться его собственный текст, настройки кнопок и т. Д. Если это так, то какое влияние на память является статическим классом такого количества всех встроенных сообщений и использованием файла ресурсов? – DRapp

0

Вы можете использовать файлы ресурсы для экспорта всего текста в там (своем роде локализация особенности, а). Resharper 5.0 действительно помогает в том, что выделяет текст, который можно переместить на ресурс.

Обычно это выглядит следующим образом:

  1. До: MessageBox.Show(error.ToString(), "Error with extraction");
  2. внушения: Localizable строка "Ошибка при извлечении"
  3. правой кнопкой мыши Переместить Ресурсный
  4. Выберите файл ресурса и имя (MainForm_ExtractArchive_Error_with_extraction) , также check checkbox Найти похожие товары в классе ...
  5. Назовите это следующим образом: MessageBox.Show(error.ToString(), Resources.MainForm_ExtractArchive_Error_with_extraction);

Лучшее из всего, что позволяет легко перевести материал на другие языки, а также сохранить текст для MessageBox в отдельном Resource. Конечно Resharper делает все это для вас, так что не нужно набирать так много :-)

+0

Это близко к тому, о чем я думал, но не к Resharper ... пытаясь ограничить любые элементы субдискрипции для целей распространения и по другим причинам. – DRapp

+0

Общая идея справляется без Resharper, но Resharper просто делает ее очень простой. – MadBoy

0

Я полагаю, вы могли бы использовать HashTable, чтобы сделать что-то подобное, как это, это можно найти в:

using System.Collections; 

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

public class MessageBoxStore 
{ 
    private HashTable stock; 
    public string Get(string msg) 
    { 
     if (stock.ContainsKey(msg)) 
      return stock[msg]; 
     else 
      return string.Empty; 
    } 

    public string Set(string msg, string msgcontent) 
    { 
     stock[msg] = msgcontent; 
    } 
} 

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

вызывать функцию, подобную этой, при загрузке программы.

public LoadErrorMessages() 
{ 
    storeClass = new MessageBoxStore(); 
    storeClass.Set("UserCantDoThat", "Invalid action. Please confirm your action and try again"); 
} 

например, а затем.

MessageBox.Show(storeClass.Get("UserCantDoThat")); 

я положил это в новом классе вместо того, чтобы использовать Хеш методы получения/установки прямой, потому что это оставляет место для настройки так MessageBox может быть создан в ГЭТ, и более чем 1 часть информации может быть сохранена в наборе для обработки заголовка сообщения, типа кнопок, содержимого и т. д.

+0

Спасибо за ввод, его вид креста между вашим входом и MadBoy's ... Я буду спорить с тем, что я начал, и, вероятно, использовал аналогичные принципы. – DRapp

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