saber - ruta relativa c#
Winforms: la mejor estructura de directorio/proyecto (3)
Para mí, depende del modelo que estoy siguiendo. Si estoy usando MVC, sería
Project
-Models
-Controllers
-Views
O para MVP sería
Project
-Models
-Presenters
-Views
Bajo las vistas, los separé en espacios de nombres relevantes para los controladores, es decir, si tengo un controlador para manejar las transacciones de inventario, podría tenerlo como
Project
-Models
--Inventory
-Controllers
--Inventory
---TransactionsController.cs
-Views
--Inventory
---Transactions
----EditTransactionsView.dfm
Para las interfaces, ubico la interfaz en el mismo directorio que las implementaciones.
Quería ver los pensamientos de la gente sobre la mejor manera de organizar la estructura de directorios y proyectos en un proyecto / solución para una aplicación C # de winforms.
La mayoría de las personas está de acuerdo en que es mejor separar la vista, la lógica de negocios, los objetos de datos, las interfaces, pero quería ver cómo las diferentes personas abordan esto. Además, aísle las dependencias de terceros en los proyectos de implementación y luego tenga proyectos de interfaz exportados que los consumidores refieran
Además, en términos de estructura de carpetas, ¿qué es mejor anidar?
Interfaces
--- IFoo
--- IData
Impl
--- Foo
---Datos
o
Producto
--- Interfaces / IProduct
--- Impl / Producto
Foo
--- Impl / Foo
--- Interfaces / IFoo
Todos tratando de impulsar las dependencias desacopladas en las abstracciones y la capacidad rápida para las implementaciones cambiadas.
¿Pensamientos? ¿Mejores prácticas?
Por lo general, mantenemos los proyectos de SourceSafe, los nombres de los proyectos, los espacios de nombres y las estructuras de directorios sincronizados.
Por ejemplo, dado el nombre de nuestra empresa como XCENT, la estructura de SourceSafe y la estructura de directorios correspondiente para App1 se ve así:
/XCENT
/XCENT/App1
/XCENT/App1/UI
/XCENT/App1/UI/Test //test harness for UI
/XCENT/App1/Data
/XCENT/App1/Data/Test //test harnesses for Data
etc.
El proyecto de UI se llama XCENT.App1.UI.cproj, y las clases dentro de ese espacio de nombres son XCENT.App1.UI
También trabajamos para muchos clientes, de modo que el trabajo específico para ellos está precedido de su nombre. Client1 / App1 / UI, etc.
Todos en nuestra empresa utilizan las mismas convenciones y de inmediato queda claro dónde encaja todo.
Si tiene sentido segmentar el espaciado lógico más adelante, lo hacemos. Dicha otra segmentación incluye .Export, .Import, .Reporting, .Security, etc.
Una respuesta tardía, pero también puede sonar.
Personalmente he usado carpetas basadas en el tipo de artículo real que es. Por ejemplo:
- Project
+ Forms
+ Classes
+ UserControls
+ Resources
+ Data
Así que termino con:
new Forms.AboutForm().ShowDialog();
Controls.Add(new Controls.UberTextBox());