2011-01-18 61 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文件。