2011-08-12 14 views
1

私は、複数のデバイスからバイナリ形式で送信される様々なメッセージを解析するライブラリを持っています。デバイスはまだ活発に開発されており、ファームウェアが頻繁に変更されるため、既存のすべてのバージョンのさまざまなプロトコルをサポートする必要があります。データのバージョンに基づくクラス名

のは、改正前のメッセージがこのように見えたとしましょう:それはのように私のパーサクラスに名前を付ける意味を成してい

INFO XXXX YYYY ZZZZ CRC

INFO XXXX YYYY CRC

およびファームウェアのバージョン50の後に、それに変更これは:

class InfoParser : IParser<IInfoMessage> 
{ ... } 

class InfoParserRev50 : IParser<IInfoMessage> 
{ ... } 

これらはどちらも同じことをしており、共存する必要があります。変更いつも起こる、しかし、私は彼らに名前を付けるより良い方法があるのだろうかと思っていた?

+0

imhoの名前はちょうどいいです。 – jgauffin

答えて

2

異なるバージョンの解析を同時にサポートする必要がある場合は、異なるバージョンのクラスを維持することは完全に受け入れられると思います。これを一種のディスパッチロジックと組み合わせて、すべてを結びつけることができます。このようにして、複数のバージョンを同時にサポートし、スペックが進化するにつれてパーサーを専門化しようとすることに関連する問題を回避することができます。恐ろしくネストされ、長いif \ else文などが含まれます。

+0

ありがとうございます、それは一般的な考えです。ほとんどの場合、変更により、既存のパーサーコードに触れることなく、ベースパーサーを再利用して変更を実装することができます。私の唯一の関心事は、命名がちょっと奇妙に見えるということです。私は説明的な接尾辞(例えば、 'InfoWithAdditionFieldParser'のような名前)を追加することを考えましたが、これは数回の改訂の後に本当に乱雑になるでしょう。 – Groo

+0

@ Grooよくあるパースコードを整理できれば、これは安定していなければならないということです。そうでなければ、デバイスにわずかな癖があると、他のパーサーにバグを簡単に導入できます。私はあなたのクラスに名前をつけて、デバイスのバージョンにさかのぼることができるようにすることは賢明で自己文書化すると思います。 –

+0

さて、各パーサーのバージョンには独自の単体テストがありますが、新しいクラスのバージョンを追加すると変更されません。以前のすべてのテストを私の変更と共にグリーンにしています(それ以外の場合、すべての変更が行われていて、ずっと前に怒っていたでしょう)。 – Groo