Ahora tengo algunos grandes productos multiinquilinos basados en la web, y muy pronto puedo ver que habrá muchas personalizaciones que son específicas del inquilino.
Un campo adicional aquí o allá, tal vez una página adicional o alguna lógica adicional en medio de un flujo de trabajo, ese tipo de cosas.
Algunas de estas personalizaciones pueden integrarse en el producto principal, y eso es genial. Algunos de ellos son altamente específicos y se interpondrían en el camino de todos los demás.
Tengo algunas ideas en mente para manejar esto, pero ninguna de ellas parece escalar bien. La solución obvia es introducir un montón de configuraciones a nivel de cliente, permitiendo que se habiliten varias 'características' por cliente. La desventaja con eso, por supuesto, es la complejidad y el desorden masivo. Podría introducir una cantidad realmente enorme de configuraciones y, con el tiempo, varios tipos de lógica (presentación, negocios) podrían salirse de control. Luego está el problema de los campos específicos del cliente, que pide algo más limpio que simplemente agregar un montón de campos anulables a las tablas existentes.
Entonces, ¿qué están haciendo las personas para gestionar esto? Force.com parece ser el maestro de la extensibilidad; obviamente, han creado una plataforma desde cero que es súper extensible. Puede agregar a casi cualquier cosa con su interfaz de usuario basada en web. FogBugz hizo algo similar cuando crearon un robusto modelo de complemento que, pensándolo bien, podría haber sido inspirado por Force. Sé que gastaron mucho tiempo y dinero en ello y, si no me equivoco, la intención era usarlo internamente para el desarrollo futuro de productos.
Suena como el tipo de cosas que podría tener la tentación de construir, pero probablemente no debería. :)
¿Es una inversión masiva en arquitectura conectable el único camino a seguir? ¿Cómo maneja estos problemas y qué tipo de resultados está viendo?
EDITAR: Parece que FogBugz manejó el problema construyendo una plataforma bastante robusta y luego usándola para armar sus pantallas. Para extenderlo, crea una DLL que contiene clases que implementan interfaces como ISearchScreenGridColumn, y que se convierte en un módulo. Estoy seguro de que fue tremendamente costoso construirlo teniendo en cuenta que tienen una gran cantidad de desarrolladores y trabajaron en él durante meses, además su área de superficie es quizás el 5% del tamaño de mi aplicación.
En este momento me pregunto seriamente si Force.com es la forma correcta de manejar esto. Y soy un chico de ASP.Net duro, así que esta es una posición extraña para encontrarme.