Какой тип структуры данных ОО мне следует использовать для этих строковых данных? - PullRequest
0 голосов
/ 02 февраля 2009

Допустим, моей программе всегда передается строка символов, представляющая таблицу данных в синтаксисе Wiki. Что-то вроде:

  {||Client:||ABC|-|Contact:||Joe Smith|-|Current revision:||1.0||}

Я не хочу, чтобы каждый из моих конкретных объектов вики-таблиц (например, ClientContactTable, CustomerOrderTable и т. Д.) Знал, как анализировать | и и }. Поэтому я хотел бы написать 1 кусок кода, который анализирует строку в некотором объекте данных «среднего» уровня, который я могу передать конструктору каждого конкретного объекта таблицы Wiki.

Мой вопрос: каким должен быть этот объект среднего уровня?

Ответы [ 4 ]

3 голосов
/ 02 февраля 2009

Вы хотите реализовать System.Runtime.IFormatter для создания универсального средства форматирования сериализации WikiTable. Чтобы помочь вам с этим, вы можете наследовать от System.Runtime.Formatter базового класса.

Как только вы это сделаете, вы будете использовать это так:

Stream msg = GetWikiClientContactTableMessage();
WikiTableFormatter wtf = new WikiTableFormatter(); // nice name ;)
ClientContactTable result = (ClientContactTable)wtf.Deserialize(msg);

Кроме того, этот код, вероятно, будет немного легче написать, если вы сделаете это больше как XmlSerializer и заставите вызывающую сторону передать ожидаемый тип вывода конструктору. Затем вы можете использовать отражение, чтобы получить свойства, которые вы ожидаете, если вам нужно.

0 голосов
/ 03 февраля 2009

Как уже говорили другие, если вы хотите, чтобы имя использовалось в качестве ключа, используйте ассоциативную карту (строка-> строка). Это должно быть самым чистым способом; это означает, что ваш код синтаксического анализа может включать в себя множество проверок ввода и обработки ошибок, которые в противном случае были бы дублированы для каждого класса объектов.

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

0 голосов
/ 02 февраля 2009

Я бы использовал словарь или хэш-таблицу.

http://msdn.microsoft.com/en-us/library/xfhwa508.aspx

В случае, если документы MSDN трудно читать (всегда были для меня), я дам краткий обзор. По сути, словарь принимает объект (строку?) В качестве ключа, а другой объект для данных.

Dictionary<string,string> d = new Dictionary<string,string>();
d["key1"] = "value";
d["anotherkey"] = "anothervalue";
0 голосов
/ 02 февраля 2009

Я бы пошел с картой из строк в строки.

Это не особенно ОО, но оно подойдет, если в работе нет чего-то, чего я не знаю.

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