Внутренняя C # «база данных» для отслеживания данных - PullRequest
0 голосов
/ 25 августа 2009

Я работаю над проектом на C #, который требует, чтобы я отслеживал различные объекты классов, которые я определил ... например, class1, class2 и т. Д. Каждый из этих классов имеет идентификатор, который определен как Guid .

Мой текущий метод отслеживания всех этих объектов, которые я создаю, заключается в сохранении их в Hashtable. Ниже приведен пример того, что я делаю.

Hashtable c1_db = new Hashtable();
Hashtable c2_db = new Hashtable();

// class 1
Class1 c1_1 = new Class1(..);
Class1 c1_2 = new Class1(..);

// add class1 objects to database
c1_db.Add(c1_1.id, c1_1);
c1_db.Add(c1_2.id, c1_2);

// class 2
Class2 c2   = new Class2(..);
c2_db.Add(c2.id, c2);

Итак, в основном я использую каждый Guid в качестве ключа Hashtable для последующего поиска, когда мне нужно получить мои объекты.

Вопрос, который у меня возникает, касается моей реализации здесь ... это хороший способ обработки нескольких объектов? Я неплохо знаком с C # / OOP, так что я уверен, что есть гораздо лучшие способы сделать это ... но мне показалось, что это довольно быстрый / простой / быстрый способ управления внутренними данными.

Ответы [ 3 ]

3 голосов
/ 25 августа 2009

По моему опыту, в этом подходе нет ничего неправильного. Я также использовал это в прошлом. Но вы, вероятно, хотите использовать Dictionary<TKey, TValue> из-за безопасности типов в этом случае. Облегчает обработку, чем неуниверсальная хеш-таблица.

2 голосов
/ 25 августа 2009

В этом коде нет ничего плохого. Вопрос скорее в том, какие проблемы он должен решить. Вы можете говорить о хороших / плохих решениях, только если объясните, что на самом деле должно быть достигнуто.

1 голос
/ 25 августа 2009

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

Начальная стратегия для использования будет следующей:

Поскольку каждый объект, который вы собираетесь отслеживать, содержит GUID, создайте базовый класс или интерфейсный класс, который имеет в качестве члена GUID в качестве члена класса, это позволит вам создать

Dictionary<GUID, iTrackedClass> 

Без проблем.

Еще кое-что, что я должен регулярно использовать, - передать сам словарь в конструктор для вашего объекта и автоматически добавить объект в словарь по мере его поступления, чтобы сохранить ваш код инкапсулированным. Если вы не хотите, чтобы ваш код был добавлен в список, просто отправьте нулевое значение и проверьте конструктор.

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