6

昔は、「低レベル」のデータモジュールがあり、他のモジュールに依存していませんでしたが、たとえばシステム全体で使用される列挙型を取得するために、それらによって参照される可能性がありました。
これで、呼び出しとイベントを使用した、モジュール間のオブジェクト指向インターフェースができました。私の質問は、システム全体で使用される列挙型が定義されている場所がまだ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?

4

2 に答える 2

3

This is a matter of code organization, modularity and reuse. It might make sense for two modules to reuse a third (think projects in the same solution), but if they're part of separate bounded contexts (think solutions), they evolve independently and should generally use separate definitions. The mapping that you see should be normal between separate bounded contexts, but the enums should possibly be unified within the same context.

于 2012-12-22T21:53:25.153 に答える
2

C#とJavaの最新のDLLメカニズムでは、リファクタリングにより、一般的なもの(質問の場合は列挙型)を他のユーザーが共有する共通のDLLに移動できます。ご指摘のとおり、これを利用するのは簡単なことのように思えます。

それでも、私たちの多くが知っているように、コードの形とアーキテクチャは、責任のある組織の形とアーキテクチャを反映する傾向があります(コンウェイの法則、http://en.wikipedia.org/wiki/Conways_Law)。コードは、要件を満たすだけでなく、作成者、制御と責任(スケジュールとプロジェクト管理)、および保守の責任に関するものです。これらにより、コードの構造は組織図の構造を反映します。

http://blogs.gartner.com/ray_valdes/2008/09/19/organizational-structure-vs-product-architecture-which-one-wins/も参照してください)

ですから、あなたが説明しているようなものを見たとき、組織の構造や政治が働いているのではないかと思います。誰かが共通のDLLを所有している必要があり、どちらの組織も他の組織に依存したくない場合があります。結果はそのような複製になる可能性があります。

于 2012-12-22T21:44:48.907 に答える