2011-01-18 8 views
5

Tengo una definición de enumeración en un módulo (A), p. SUCCESS = 0, INVALID_REQ = 1 etc. Luego tengo otro dll (módulo B) que tiene su propio conjunto de estado enum. Una vez que agreguemos un nuevo valor enum en A, tenemos que agregarlo manualmente a B ya que A está en .NET y B es código C. Además, enum en A es solo parte de la enumeración de estado en B (B tiene su propio estado interno además del estado de A). Esto parece un acoplamiento muy apretado entre estos dos módulos. Alguna sugerencia para hacerlos menos acoplados? ¡Thx!Conversión de Enum entre los módulos

+0

El mayor problema aquí no es mantener los dos sincronizados (aunque eso es un problema), sino más bien el hecho de que la enumeración en B significa algo diferente a la enumeración en A. Ahora abre la posibilidad de querer agregue un nuevo elemento a A, pero de repente entra en conflicto con un valor interno que utiliza B. Si necesita duplicar valores con el propósito de la interoperabilidad, úselo _only_ para la interoperabilidad y administre el estado interno por separado. –

+1

Hay un * contrato implícito * pasando aquí. Imagine HTTP2 agrega un nuevo verbo decir, [JABBERWOCKY] (http://www.jabberwocky.com/carroll/jabber/jabberwocky.html). Todos los clientes/servidores HTTP2 necesitarían estar codificados con conocimiento de este contrato. El uso de versiones explícitas de [protocolo], tal vez con protecciones y [compatibilidad hacia abajo] (http://en.wikipedia.org/wiki/Backward_compatibility), puede ser útil para detectar y/o mitigar los desajustes. Existen herramientas para ayudar a compartir información de contrato: imagine [COM IDLs] (http://en.wikipedia.org/wiki/Component_Object_Model) u otros generadores de andamios. –

+0

@Dan: estoy pensando en usar valores enum en A como es y definir const en B comenzando desde 100 (0-99 desde A). Luego usa enteros en lugar de enum como la interfaz de B. Tanto el estado de A como el de B pueden exponerse desde la interfaz de B y no preocuparse de que A y B se interfieran entre sí. – Icerman

Respuesta

2

¿Por qué no escribir una secuencia de comandos simple que genera estas enumeraciones basadas en un archivo durante la compilación? Si realmente quieres desacoplarlos, necesitarás convertir a alguien en un maestro y exponer su contenido al otro lado. Probablemente usando RCW ..

+0

* tos * COM IDL? * tos * –

+0

:) Ese no es el fin del mundo para escribir ... :) – gbvb

1

Lo que sería divertido sería utilizar la reflexión aquí. Escriba un pequeño programa que lea la enumeración por reflexión del módulo A, y genere un archivo .h para usar en el módulo c.

Cuestiones relacionadas