以下の例を考えてください。ColorChoice列挙の変更は、すべてのIWindowColorサブクラスに影響します。
列挙型は脆弱なインターフェースを引き起こす傾向がありますか?多態的な柔軟性を可能にする列挙型よりも優れたものはありますか?
enum class ColorChoice
{
Blue = 0,
Red = 1
};
class IWindowColor
{
public:
ColorChoice getColor() const=0;
void setColor( const ColorChoice value )=0;
};
編集:私の例として色を使用して申し訳ありませんが、それは質問についてのものではありません。これは、ニシンを避け、柔軟性の意味についてより多くの情報を提供する別の例です。
enum class CharacterType
{
orc = 0,
elf = 1
};
class ISomethingThatNeedsToKnowWhatTypeOfCharacter
{
public:
CharacterType getCharacterType() const;
void setCharacterType( const CharacterType value );
};
さらに、適切なISomethingThatNeedsToKnowWhatTypeOfCharacterサブクラスへのハンドルがファクトリデザインパターンによって渡されることを想像してください。現在、許容される文字タイプが{human、dwarf}である別のアプリケーション用に将来拡張できないAPIがあります。
編集:ちょうど私が取り組んでいるものについてより具体的にするために。私はこの(MusicXML)仕様の強力なバインディングを設計しており、enumクラスを使用してxs:enumerationで宣言されている仕様内のそれらのタイプを表現しています。次のバージョン(4.0)がリリースされるとどうなるかを考えています。クラスライブラリは3.0モードと4.0モードで動作しますか?次のバージョンが100%下位互換性がある場合は、おそらく。しかし、列挙値が仕様から削除された場合、私は死んでしまいます。