Estoy trabajando en un problema de negocios en C# .NET. Tengo dos clases, llamadas C y W, que se crearán de manera independiente en diferentes momentos.¿Cuál es un buen patrón de diseño en C# para las clases que necesitan hacer referencia a otras clases?
Un objeto de clase C necesita contener referencias a 0 ... n objetos de la clase W, es decir, un objeto C puede contener hasta n W objetos.
Cada objeto W debe contener una referencia a exactamente 1 objeto de la clase C, es decir, un objeto W está contenido en un objeto C.
Un objeto de la clase C generalmente se crea primero. En un punto posterior, se descubren sus contenidos W y se crean instancias. En este punto posterior, necesito cruzar los objetos C y W entre sí.
¿Cuál es un buen patrón de diseño para esto? De hecho, tengo casos en los que tengo tres o cuatro clases involucradas, pero podemos hablar de dos clases para hacerlo simple.
Estaba pensando en algo tan simple como:
class C
{
public List<W> contentsW;
}
class W
{
public C containerC;
}
Esto funciona por el momento pero puede prever tener que escribir una buena cantidad de código para realizar un seguimiento de todas las referencias y su validez. Me gustaría implementar el código en el camino para realizar actualizaciones superficiales solo del contenedor y actualizaciones profundas de todas las clases a las que se hace referencia. ¿Hay otros enfoques y cuáles son sus ventajas?
Editar en 11/3: Gracias a todos por las buenas respuestas y buena discusión. Finalmente elegí la respuesta de jop porque estaba más cerca de lo que quería hacer, pero las otras respuestas también me ayudaron. ¡Gracias de nuevo!
¿cómo se hace referencia cruzada entre C y W? ¿Quién tiene "W" antes de que se haga referencia cruzada? –
Como Keith señaló en mi respuesta, tenemos que preguntarnos: ¿cuál es la vida relativa de estos objetos cara a cara? –