Абстракция протокола в C # - PullRequest
3 голосов
/ 17 июня 2010

Существуют десятки сетевых протоколов и форматов файлов (WAV, TCP, BMP и т. Д.).

Существует ли решение для создания уровня абстракции между реализацией протокола и кодом, который использует полученные данные?

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

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

EDIT: Это явно не проблема, которую легко передать по почте. Текущие ответы не совсем то, что я ищу, но я хотел бы поблагодарить всех, по крайней мере, за то, что дали ему шанс.

Ответы [ 4 ]

3 голосов
/ 17 июня 2010

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

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

Редактировать: PS Посмотрите на http://www.codinghorror.com/blog/2004/12/it-came-from-planet-architecture.html, потому что это похоже на попытку сыграть астронавта в архитектуре.

2 голосов
/ 17 июня 2010

Если это не для академических целей, я не думаю, что такой уровень абстракции был бы хорошей идеей.

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

1 голос
/ 17 июня 2010

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

Например, могут быть различия между доступом к почтовому ящику IMAP и открытиемZIP-файл настолько важен, что практически нет точек соприкосновения.

1 голос
/ 17 июня 2010

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

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

...