昔は、「低レベル」のデータモジュールがあり、他のモジュールに依存していませんでしたが、たとえばシステム全体で使用される列挙型を取得するために、それらによって参照される可能性がありました。
これで、呼び出しとイベントを使用した、モジュール間のオブジェクト指向インターフェースができました。私の質問は、システム全体で使用される列挙型が定義されている場所がまだ1つあるべきではなく、これらの列挙型は、それらを必要とするすべてのインターフェイスによって参照される必要があるということです。
本質的に同じ列挙型が各インターフェイスで再定義され、別のモジュールに渡されるときの変換関数を備えたソフトウェアを見てきました。
したがって、たとえば、インターフェイスIModule1には次のようなものがあります。
enum module1_state
{
Unknown,
NotRunning,
Running
}
とインターフェイスIModule2が持っている可能性があります
enum module2_state
{
Unknown,
NotRunning,
Running
}
たとえば、モジュール1がデータを収集する場合、モジュール2はいくつかのロジックを実行し、さらにデータを3番目のモジュール(GUIなど)に渡します。
多くの場合、列挙型はまったく異なります。たとえば、2番目のモジュールは3番目のモジュールでは必要のない情報を抽象化し、簡略化されたバージョンを渡すことができるためです。
ただし、場合によっては違いはありません。ここでは、列挙型が各インターフェイスで再定義されているのは間違っているように思われます。例として、いくつかの異なるユースケースの一部として実行されるアクションがあります。アクションは同じですが、ユースケースに応じて、いくつかの小さな詳細が異なります。ユースケースの詳細を含む列挙型は、インターフェイスを介して高レベルのロジックモジュールに渡され、次に別のインターフェイスを介して低レベルのモジュールに渡されます。各インターフェイスで再定義されるため、高レベルロジックモジュールで変換する必要があります。
There are some other modules which just translate older, existing interfaces to newer ones, and again, both interfaces have re-defined the same enum.
Can anyone tell me which is best practice?