usar una saber referencias referencia problema mas iterativo hoja hay esta encontro eliminar elimina donde cómo con como circulares calculo .net visual-studio architecture circular-reference

.net - saber - excel encontro un problema con una o mas referencias de formula de esta hoja



¿Cómo tratar las referencias circulares? (4)

Extraiga interfaces de sus clases y colóquelas en un proyecto central al que se hace referencia tanto en proyectos de Billing como Financial . A continuación, puede utilizar esas interfaces para compartir datos entre conjuntos.

Esto solo le permite pasar objetos entre esos 2 ensamblajes, pero no puede crear objetos desde el otro ya que para empezar no tiene una referencia. Si desea poder crear objetos, necesita una fábrica, externa a esos 2 proyectos, que maneja la creación de objetos.

Extraería la lógica empresarial que necesita compartir los datos entre Billing y Financial en otro proyecto. Esto facilitaría mucho las cosas y evitaría que recurriera a todo tipo de trucos que hacen que el mantenimiento sea una pesadilla.

Si tengo esos dos proyectos:

MyCompany.ERP.Billing MyCompany.ERP.Financial

Facturación solicita / envía información a Financiero y viceversa. Ambos son demasiado grandes, así que no quiero ponerlos en un solo proyecto. Visual Studio no permite referencias circulares. ¿Cómo lidiarías con eso?


La respuesta que menciona las interfaces es correcta, pero si necesita poder crear ambos tipos de ambos proyectos, deberá crear una fábrica en otro proyecto (que también haga referencia al proyecto de interfaces, pero que ambos puedan hacer referencia a él). de sus proyectos principales) o cambie la estructura que está usando significativamente.

Algo como esto debería funcionar:

Finance: References Billing, Interfaces, Factory Billing: References Finance, Interfaces, Factory Factory: References Interfaces

Factory tendría una BillingFactory.CreateInstance() As Interfaces.IBilling y también la clase de facturación abstracta que implementa Interfaces.IBilling.

El único problema que puedo ver es si necesitas hacer algo inteligente al crear una instancia de un objeto y no quieres que esa lógica termine en un proyecto separado, pero como no has mencionado ninguna lógica inteligente para crear una instancia, esto debería ser suficiente


Tener un proyecto demasiado grande no debería ser un problema. Puede mantener su código estructurado con espacios de nombres y diferentes carpetas para el código fuente. En este caso, las referencias circulares ya no son un problema.


Esta solución podría terminar como una solución para el problema de referencia circular. Básicamente, usa la lógica #if alrededor del código que no se compila a menos que exista la referencia, y usa la compilación condicional en el archivo de proyecto para definir una variable solo si existe el ensamblaje necesario. Como resultado, en la primera descarga desde la fuente, o después de una solución limpia, debe compilar dos veces. Las compilaciones / reconstrucciones posteriores solo requieren 1 compilación de la forma habitual. Lo bueno de esto es que nunca tiene que comentar / quitar comentarios de forma manual #define.