在C#中的每个面向对象的接口上重新定义相同的枚举

use*_*145 6 c# interface

在过去,您经常有一个"低级别"的数据模块,不依赖于任何其他模块,但可以被它们引用,例如获取整个系统中使用的枚举.
现在我们在模块之间有面向对象的接口,带有调用和事件.我的问题是,我们是否应该只有一个地方可以定义整个系统中使用的枚举,这些枚举应该由需要它们的每个接口引用?

我已经看到了软件,其中每个接口上重新定义了相同的枚举,并将转换函数传递给另一个模块.

例如,IModule1可能具有的接口

enum module1_state
{
    Unknown, 
    NotRunning,
    Running
}
Run Code Online (Sandbox Code Playgroud)

以及IModule2可能具有的接口

enum module2_state
{
    Unknown,
    NotRunning,
    Running
}
Run Code Online (Sandbox Code Playgroud)

在模块1例如收集数据的情况下,模块2执行一些逻辑,然后将数据进一步传递到第三模块,例如GUI.

在许多情况下,枚举将是真正不同的,因为例如,第二模块可以抽象出第三模块不需要的一些信息,并传递简化版本.
但在某些情况下,它们并没有什么不同,我认为枚举仍然在每个界面上重新定义.一个示例是作为几个不同用例的一部分执行的操作.操作是相同的,但根据用例,几个小细节是不同的.携带用例细节的枚举通过接口传递到高级逻辑模块,然后通过另一个接口传递到较低级别模块.它在每个接口上重新定义,因此必须在高级逻辑模块中进行转换.

还有一些其他模块只是将较旧的现有接口转换为较新的接口,同样,两个接口都重新定义了相同的枚举.

谁能告诉我哪种是最佳做法?

Jor*_*dão 3

这是代码组织、模块化和重用的问题。两个模块重用第三个模块可能是有意义的(想想同一个解决方案中的项目),但如果它们是单独的有界上下文的一部分(想想解决方案),它们就会独立发展,并且通常应该使用单独的定义。您看到的映射在单独的有界上下文之间应该是正常的,但枚举应该在同一上下文中统一。