====== Modularidad ======
Es la propiedad que adquiere una aplicación cuando puede dividirse en partes mas pequeñas, que pueden trabajar por separado pero a su vez pueden mantener conexiones entre sí.
===== Ejemplos =====
* **Sistema de Audio y Vídeo**.- En una casa tienes un televisor que su función es mostrar canales de televisión, pero puedes adquirir un sistema de televisión por cable donde conectas un decodificador a la televisión y con esto le permite ver mas canales, también puedes conectar un reproductor de blue-ray a la televisión y con esto le permite poder reproducir vídeos almacenados en medios ópticos, por ultimo se puede conectar un sistema de audio a cualquiera de los dispositivos mencionados anteriormente para darle mas poder de audio, esto es un sistema modular, cada aparato puede funcionar por separado y inter-conectados entre sí.
* **Ciclo de vida de desarrollo de software (ALM)**.- Un ALM, se encuentra dividido en muchos procesos, normalmente cada proceso con lleva una documentación, y para poder cumplir con el ciclo de desarrollo es necesario que se genere toda la documentación, existen situaciones especiales plenamente identificadas en las que se omiten procesos y por consecuencia se omite la documentación, un proceso de desarrollo normal lleva **acta de necesidades, acta de requerimientos, solicitud de cambios, documento de casos de uso, documento de pruebas y carta de liberación**, mientras que un defecto en producción solo lleva **ticket de mesa de ayuda, solicitud de cambios, documento de pruebas y carta de liberación**, en estos caso se dice que el ALM es modular, ya que puede prescindir de ciertos procesos, y a su vez pueden entrar otros procesos para cubrir una necesidad.
* **Business Process Management (BPM)**.- Un BPM es un orquestador de procesos, esto quiere decir que, en un BPM se pueden configurar diferentes procesos por medio de interfaces, por ejemplo, se tiene como proceso inicial el sistema de ventas, cada que se genera una venta el sistema le informa al BPM y este le dice al sistema de almacén que descuente producto del inventario, a su vez le informa al sistema de facturación electrónica que emita un comprobante fiscal, le genera una orden de trabajo al sistema de producción, si en un futuro deciden quitar el sistema de almacén basta con modificar el flujo en el BPM para que este ya no se considere, permitiendo que el sistema de almacén se administre por separado, o bien sea sustituido por otro.
==== Aplicación en CSharp ====
En el siguiente ejemplo veremos como una aplicacion tiene modularizado el servicio de datos, donde un componente llamado fábrica obtiene al servicio de datos apropiado, para que se pueda almacenar los valores de una persona, a su vez veremos dos servicios de datos, uno que almacena a una base de datos y otro que almacena a un archivo de texto.
using System;
namespace Capacitacion.Modularidad
{
public interface IDataService
{
void Guardar(Persona persona);
}
public class Persona
{
public string Nombre { get; set; }
public string Apellido { get; set; }
}
public abstract class FactoryDataService
{
public static IDataService Create()
{
//Implementación de la fábrica para obtener el DataService apropiado
}
}
}
using System;
namespace Capacitacion.Modularidad.Datos
{
public class BDDataService : IDataService
{
public void Guardar(Persona persona)
{
//implementacion de guardado de persona en base de datos
}
}
}
using System;
namespace Capacitacion.Modularidad.Datos
{
public class TextDataService : IDataService
{
public void Guardar(Persona persona)
{
//implementacion de guardado de persona en archivo de texto
}
}
}
using System;
using Capacitacion.Modularidad.Datos;
namespace Capacitacion.Modularidad
{
public class Program
{
public static void Main(string[] args)
{
IDataService ds = FactoryDataService.Create();
var persona = new Persona();
persona.Nombre = "Juan";
persona.Apellido = "Perez";
ds.Guardar(persona);
Console.ReadLine();
}
}
}