c++ - ¿Cómo diseño la estructura de un paquete de CAD?
architecture lua (5)
Está claro que necesitará exponer algunas funciones a lua a través de su API para que los desarrolladores puedan componer y combinar esas características.
Me tropiezo con esta buena presentación sobre cómo diseñar correctamente una API y las recomendaciones incluidas coinciden con lo que he hecho en el pasado. Te ayudará a guiar tu diseño.
Una vez que tenga una API, le recomiendo usar el patrón de comando en lua o en C ++ para crear un puente con la interfaz de usuario. En el pasado, he encapsulado cada llamada API en un Comando y el comando se podía llamar a través de un script. No sé lua pero sé que Python es un buen lenguaje de script para usar con tus comandos.
Buena suerte con tu proyecto.
Estoy desarrollando, en C ++, un paquete de diseño asistido por computadora para placas de circuitos impresos y esquemas (también conocido como EDA CAD). Utiliza Lua para algunas cosas específicas, pero me gustaría ampliar el rol de Lua para que implemente gran parte de la lógica de la interfaz de usuario.
Me gustaría volver a construir las partes internas de una manera que permita a las personas cambiar fácilmente el comportamiento de la interfaz de usuario mediante la edición de Lua, y también agregar nueva funcionalidad.
El problema es que, aparte de exponer algún tipo de API masiva al código Lua, no puedo pensar en una buena manera de hacerlo. Sospecho que una API masiva, con una función llamada para todo lo que puedo pensar es probablemente un mal diseño. ¿Cómo puedo diseñar un sistema que permita a los usuarios implementar cosas que ni siquiera había pensado?
¿Hay un buen documento o libro que pueda leer, o un foro donde la gente hable de este tipo de cosas? He estado buscando y pensando durante muchos meses, y todavía no estoy seguro de cuál es la respuesta.
Por cierto, el proyecto se llama LiquidPCB .
Muchas gracias
Hugo
Pruebe SWIG (Wrapper simplificado y generador de interfaz). Puede generar contenedores Lua para archivos de encabezado C / C ++ existentes. Le permitirá exponer rápidamente todas las API a Lua. En función de su experiencia, puede decidir sobre una arquitectura diferente.
¿Opensource el proyecto?
Por lo que dicen sus usuarios van a tener un cierto nivel de conocimiento de programación, y también querrán implementar nuevas características. De esta forma, cumplen dos roles, como el cliente y el desarrollador.
¿Por qué no tener un árbol de fuentes públicas de solo lectura que pueden consultar, trabajar y enviar revisiones a usted? Si luego considera que su trabajo es lo suficientemente bueno y relevante, puede incluirlo en la próxima versión.
Si considera que el desarrollador es lo suficientemente bueno en general, podría darles acceso de escritura directa al árbol fuente y comenzar a planificar nuevas funciones con ellos.
Me gustaría señalar lo que está sucediendo en el desarrollo de la nueva versión de Blender, 2.50. La anterior API de Python solía ser una capa escrita a mano que intentaba ajustar la mayoría de las funcionalidades. La nueva API automáticamente ajustará el acceso a la estructura de datos a través de una API de datos . Más documentos aquí .
La nueva API de Sketchup Ruby es un buen ejemplo de lo que estás buscando. Compáralo con la API anterior para obtener algunas ideas interesantes sobre lo que no debes hacer.