C#中的协议抽象

时间:2010-06-17 16:50:48

标签: c# design-patterns protocols file-format abstraction

有数十种网络协议和文件格式(WAV,TCP,BMP等)

是否有可用于在协议实现和使用结果数据的代码之间创建抽象层的解决方案?

获取WAV文件。软件组件可以包含识别卡盘并将其解析为类的逻辑。该组件的用户无需知道通道数是以两个还是四个字节存储。

WAV文件格式规范与数百种其他格式和协议并不完全不同,为什么不制作通用解决方案呢?为了创建更好的抽象,协议规范可以存储在XML中。我没有找到这样的事情。你能指出我正确的方向吗?

编辑: 这显然不是一个容易通过帖子传达的问题。目前的答案并不是我想要的,但我要感谢大家至少给它一个机会。

4 个答案:

答案 0 :(得分:3)

这听起来很像泛化太过分了。大多数这些格式和协议彼此之间的差别很大,它们与存储在文件中的共同点几乎没有。

即。这些格式之间存在更多差异共性,大多数共性已经被标准库和/或操作系统抽象出来。因此,这看起来并不是一个非常实用的想法。

编辑:PS看看http://www.codinghorror.com/blog/2004/12/it-came-from-planet-architecture.html,因为这非常像试图扮演宇航员的架构。

答案 1 :(得分:2)

除非这是出于学术目的,否则我认为这样的抽象层不是一个好主意。

根据数据的格式和数量,它会显着降低性能,使其更适合本机实现。此外,使用XML作为规范会使您的性能问题更加严重。

答案 2 :(得分:1)

如果你把某些东西抽象得太远,它就会变得毫无用处,你必须打开黑匣子才能完成任何事情。

保存声音文件,图像和电子表格的“通用”容器将毫无用处,因为您将拥有处理特定于这些类型数据的内容的代码,但现在您已经跨越了额外的通用容器废话。

答案 3 :(得分:1)

大多数事情都可以包含在协议中 - 只要想想在URL中包含了多少内容。但这并不总是意味着结构真的被抽象为有意义的层。我认为各种协议和格式表明可能有一些类别可以抽象,但不是一个抽象来统治它们。

例如,访问IMAP邮箱和打开ZIP文件之间可能存在差异,因此存在很少的共同点。