2011-01-18 35 views
5

我在一个模块(A)中有一个枚举定义,例如, SUCCESS = 0,INVALID_REQ = 1等。然后我有另一个dll(模块B),它有自己的一组状态枚举。一旦我们在A中添加一个新的枚举值,我们必须手动将它添加到B中,因为A在.NET中,B是C代码。除此之外,A中的枚举只是B中状态枚举的一部分(B除了A的状态外,还有其自身的内部状态)。 这似乎是这两个模块之间非常紧密的耦合。任何建议,使他们不那么耦合? Thx!在模块之间转换枚举

+0

这里最大的问题不在于保持两者同步(尽管这是一个问题),而是事实上,B中的枚举意味着与A中的枚举不同的事实。现在,您打开了想要为A添加一个新元素,但突然它与B使用的内部值冲突。如果您为了互操作性的目的需要复制值,请使用_only_来实现互操作性并单独管理内部状态。 – 2011-01-18 22:40:54

+1

这里有一个*隐式合约*。想象一下HTTP2会添加一个新的动词,如[JABBERWOCKY](http://www.jabberwocky.com/carroll/jabber/jabberwocky.html)。所有的HTTP2客户端/服务器需要在知道这个合同的情况下进行编码。使用明确的[协议]版本,或许带有警卫和[向下兼容性](http://en.wikipedia.org/wiki/Backward_compatibility),可以有效捕捉和/或减轻不匹配。有工具可以帮助分享合同信息 - 想象[COM IDL](http://en.wikipedia.org/wiki/Component_Object_Model)或其他脚手架发电机。 – 2011-01-19 00:08:01

回答

2

为什么不编写一个简单的脚本,在构建期间基于文件生成这些枚举?如果你真的想解开它们,你需要让某人成为主人,并将其内容暴露给另一方..可能使用RCW ..

1

有趣的是在这里使用反射。编写一个小程序,通过模块A的反射读取enum,并生成一个用于c模块的.h文件。