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

标签 c# interface

在过去,你经常有一个“低级”的数据模块,它不依赖于任何其他模块,但可以被它们引用,例如获取在整个系统中使用的枚举。
现在我们在模块之间有了面向对象的接口(interface),包括调用和事件。 我的问题是,我们不应该仍然有一个地方来定义整个系统中使用的枚举,并且这些枚举应该被需要它们的每个接口(interface)引用吗?

我见过在每个接口(interface)上重新定义基本上相同的枚举的软件,当它被传递到另一个模块时具有翻译功能。

例如,接口(interface) IModule1 可能有

enum module1_state
{
    Unknown, 
    NotRunning,
    Running
}

IModule2 可能具有的接口(interface)

enum module2_state
{
    Unknown,
    NotRunning,
    Running
}

例如,模块 1 收集数据,模块 2 执行一些逻辑,然后将数据进一步传递给第三个模块,例如一个图形用户界面。

在许多情况下,枚举会真正不同,因为例如,第二个模块可以抽象出一些第三个模块不需要的信息,并传递一个简化版本。
但在某些情况下,它们并没有什么不同,在这里我觉得枚举仍然在每个接口(interface)上重新定义是不对的。 示例是作为多个不同用例的一部分执行的操作。 Action 是一样的,但是根据用例的不同,几个小细节是不一样的。带有用例详细信息的枚举通过接口(interface)传递到高级逻辑模块,然后通过另一个接口(interface)传递到较低级别的模块。它在每个接口(interface)上都被重新定义,因此必须在高层逻辑模块中进行翻译。

还有一些其他模块只是将旧的、现有的接口(interface)转换为较新的接口(interface),并且这两个接口(interface)都重新定义了相同的枚举。

谁能告诉我哪个是最佳实践?

最佳答案

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

关于c# - 在 C# 中的每个面向对象的接口(interface)上重新定义相同的枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14006397/

相关文章:

java - 选择接口(interface)或抽象类

c# - 无法使用 IDataReader 读取临时表

c# - Process.start:如何获得输出?

c# - 接口(interface)向下转换

java - 是我导师的界面有问题吗?

go - 基本类型的解引用接口(interface)

c# - 尽管有 ReSharper [NotNull] 注释,我是否应该添加显式空检查?

c# - 远程桌面连接中的 SetForegroundWindow

c# - 从 C# 创建 SQL Server 数据库 - 使用参数

安卓界面: show form like the grouped listview style?