Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вопрос по организации кода, обработка KeyNotFound 
V
    Опции темы
ДобренькийПапаша
Дата 9.6.2011, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 14.1.2006
Где: г.Москва

Репутация: нет
Всего: 7



Не знаю как поступить в конкретной ситуации. Ситуация такая. Коллега создал на базе таблицу с двумя столбцами типа varchar(). Создал библиотеку, которая имеет метод Load() и возвращает Dictionary<string, string>. То есть табличка для Key, Value.

Мне во многих окнах надо вытаскивать словарь и обращаться к конкретным ключам, чтобы изменить или просто вытащить value. Предположим, что в главном окне при первой загрузке программы я запишу сразу нужные мне ключи в базу, которые когда либо будут использованы. Но достаточно ли безопасно затем во всех окнах обращаться просто по ключу типа:

Код

var parameters = Parameters.Load();
parameters["AKey"]="Value"; //Безопасно ли это?


Вдруг кто-то залез кривыми руками и удалил этот ключ из базы? Ну мало-ли? Должен ли я проводить предварительные проверки при каждом обращении? Если да, то каждый раз проверять - адские муки. Много дублирования одних и тех же строк (даже если метод типа IsExist() куда-нибудь вынести и всё такое).

Так что всё-таки делать в таком случае?


--------------------
Меня зовут Себастьян Парейра, торговец чёрным деревом.
PM MAIL   Вверх
jonie
Дата 9.6.2011, 20:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 22
Всего: 118



Цитата

Вдруг кто-то залез кривыми руками и удалил этот ключ из базы? Ну мало-ли? Должен ли я проводить предварительные проверки при каждом обращении? 
при присвоении не должен. По крайней мере в .NET4 это пофиксили. Там перегружен this[TKey key]{set;}.
А вот при получении значения (get метод вышеописанного метода) должны.


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
ДобренькийПапаша
Дата 9.6.2011, 21:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 14.1.2006
Где: г.Москва

Репутация: нет
Всего: 7



Тупо каждый раз в коде проверять методом IsExist() или вроде того?


--------------------
Меня зовут Себастьян Парейра, торговец чёрным деревом.
PM MAIL   Вверх
Voyager
Дата 9.6.2011, 23:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 532
Регистрация: 8.2.2005

Репутация: 3
Всего: 18



Нужно разделить вопрос, что именно интересует - поведение класса Dictionary или реализация в базе? 
Что-то мне подсказывает, что где-то тут проблема либо с архитектурой, либо с пояснениями. Вопрос про обращение, пример про присвоение, при присвоении у Dictionary ошибок не возникает, при обращении возникает. А с базой тогда что? Как это попадает в базу, как ведется работа с базой? В чем проблемы то?

Это сообщение отредактировал(а) Voyager - 9.6.2011, 23:09
PM   Вверх
ДобренькийПапаша
Дата 10.6.2011, 07:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 14.1.2006
Где: г.Москва

Репутация: нет
Всего: 7



Бесит каждый раз проверять наличие ключа в словаре, выкачанного с базы, когда нужно получить значение.


--------------------
Меня зовут Себастьян Парейра, торговец чёрным деревом.
PM MAIL   Вверх
RastaDja
Дата 10.6.2011, 08:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 337
Регистрация: 1.11.2010

Репутация: нет
Всего: 5



Цитата(ДобренькийПапаша @  10.6.2011,  08:19 Найти цитируемый пост)
Бесит каждый раз проверять наличие ключа в словаре, выкачанного с базы, когда нужно получить значение. 

Это нормальная практика, все так делают.
К тому-же никто не запрещает вам создать собственную функцию setByKey() c параметрами таблица, ключ, значение. Внутри функции проверить: есть ли ключ в таблице, если нет указанного ключа - создать (или что-то другое, например выход из функции), после записать в него данные. Вот и все.


--------------------
The more closely you look at one thing, the less closely can you see something else.
PM MAIL   Вверх
Voyager
Дата 10.6.2011, 12:26 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 532
Регистрация: 8.2.2005

Репутация: 3
Всего: 18



ДобренькийПапаша, понял тебя.
Не проверяй, используй Dictionary.TryGetValue, это именно то, что тебе надо.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0623 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.