Pregunta

Estoy teniendo algunos problemas para decidir en qué dirección ir ...
Tengo esta aplicación que consiste en un proyecto de la base, y un proyecto para la aplicación, el proyecto de aplicación contiene código dirigidas a un sistema específico, la aplicación del sistema.

El proyecto de la base es una clase abstracta que contiene métodos abstractos que implementa cada proyecto de aplicación específica del sistema.
La cosa es que los proyectos de sistema pueden / tendrán ajustes específicos del cliente y no querer poner este código en el montaje de aplicación del sistema.

no estoy seguro de por dónde empezar o cómo lograr esto de una manera que está garantizado para el futuro, fácil de mantener y si yo puedo añadir más código específico del cliente sin tener que reescribir el conjunto de aplicación del sistema.

La idea es tener un proyecto de base (DLL), un proyecto de aplicación del sistema para cada sistema (DLL) y luego poner los ajustes específicos del cliente en el proyecto único de un cliente (DLL).
Rob.Core.dll
Rob.Application.BigSystem.dll
Rob.Application.BigSystem.Customer.BigCompany.dll

Rob.Core.dll es el proyecto de base abstracta.
Rob.Application.BigSystem.dll es un proyecto específico del sistema ( BigSystem ) y deriva de Rob.Core.dll .
Rob.Application.BigSystem.dll debería comprobar si el cliente actual, BigCompany , tiene los ajustes únicos y si es así cargar el Rob.Application.BigSystem .Customer.BigCompany.dll conjunto que puede contener sustituciones de métodos o extensiones de objetos, campos extra, etc.

Bueno, el tiempo para resumir ...
No estoy seguro de qué camino tomar aquí, he podido crear un proyecto de base (resumen) y desde cada sistema de proyectos específicos se derivan de esto, parece que esta es la manera de empezar.
A continuación, cree un nuevo proyecto para cada cliente que tiene un conjunto de ajustes únicos y simplemente anula todos los métodos en el proyecto específico del sistema. Francia El problema es entonces, qué proyecto es el que se ejecuta en tiempo de ejecución? El proyecto específico del sistema o el proyecto único cliente?
Si el proyecto específico sistema ejecuta cómo debe cargar todos los ajustes del cliente (si los hay, no todos los clientes tiene ajustes únicos)?

Este es un gran pregunta pero estoy esperando en algunos consejos que le ayudarán a escribir la arquitectura.

Saludos
Robert

¿Fue útil?

Solución

Mis dos sugerencias, a partir de lo que ha dicho:

Me centrarse en los tipos, no proyectos. "Proyectos" son sólo una manera de crear un conjunto completo de tipos utilizables - no lo hacen, en sí mismas, heredan nada, ni permiten para la subclasificación, etc. Las preguntas que estaría preguntando: ¿Qué tipo necesitaría personalizar para un cliente? ¿Cómo sería esta personalización llevará a cabo?

Una vez que haya descubierto los - Yo sugeriría mirar en la inyección depedency o marcos de extensibilidad. Un buen marco para tratar DI sería Ninject . Un buen marco de extensibilidad es MEF .

Si se necesita siempre los tipos que se suministra de forma específica para el cliente, entonces es probable que quiere centrarse en DI. Si los tipos son algo que será una extensión opcional al comportamiento predeterminado, a continuación, sólo hacer algún tipo de sistema de plugins / sistema de extensibilidad como el MEF puede ser más simple.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top