Me gustaría desarrollar una aplicación CAD 2D usando .NET Framework WinForms o WPF, ¿me puede dar algunos consejos arquitectónicos, cómo estructurar la aplicación o recomendar algunos libros?

Hice algo no muy diferente. Era una aplicación para un modelador y motor de gráficos, con los gráficos realizados en Open GL y Direct 3D. Eres similar, porque al menos tendrás que dibujar algunas líneas para CAD, ¿verdad?

Esto es lo que encontré.

La parte .NET fue totalmente fácil de hacer, con la interfaz de usuario que involucra paneles, herramientas y otras cosas. Ni siquiera necesitaba mirar libros para hacerlo. Simplemente abra Visual Studio y arrastre y suelte. Todo es obvio.

La parte gráfica seria: de ninguna manera en el infierno, y lo digo en serio. Tuve que volver a C ++. Lo que no hubiera sido tan malo, excepto …

La interfaz interna entre C ++ y .NET era como discutir con un colon espástico. Hacer que trabajen juntos me llevó al menos el 80% de mi tiempo. Además, era tan difícil hacer pruebas unitarias que hizo que las demás partes del desarrollo tomaran más tiempo.

ETA, porque me preguntaron. Model-view-controller es una buena forma de estructurar, y creo que fue esencial para lo que estaba tratando de hacer. El controlador tenía que estar en .NET. La vista (bueno, al menos la parte 3-D) tenía que estar en C ++ o C. En realidad, había múltiples vistas, y algunas estaban en .NET, pero estas eran representaciones groseras de geometría como objetos. Algunos de los controladores tenían que estar en C ++, debido a ciertos tecnicismos. Había un patrón que C # era casi pero no lo suficientemente bueno como para implementarlo de manera elegante, pero podía hacerlo en C ++ con plantillas. De todos modos, me estoy desviando …

El problema no era la arquitectura, aunque hubiera sido peor en otras arquitecturas. El problema era obtener una comunicación significativa entre la parte .NET y la parte C ++.

Otra pregunta que he visto recientemente es si .NET fue un fracaso. Mi punto de vista es sí, en parte debido a esta incomodidad. Si tiene un código C ++, es realmente difícil refactorizarlo. No hay un mecanismo de transición obvio; es prácticamente todo o nada a través de un canal estrecho. Entonces, los trucos de andamios que hacen posible las transiciones son prácticamente imposibles. Este era un código nuevo, por lo que no era inconcebible, pero aún así era muy complicado.

No es, por ejemplo, como Objective C, donde puedes usar funciones de C e incluso usar C ++ con archivos .m. Por lo tanto, puede juntar bits aproximadamente para ver si funcionan y luego refactorizar para usar su capa de pegamento agradable y bien diseñada.

Obtenga este libro: OpenCAD: una guía paso a paso para desarrollar una aplicación CAD profesional: Deelip Menezes: Amazon.com: Tienda Kindle