¿Cómo se aplican los patrones de diseño de ingeniería de software a los sistemas distribuidos?

En un nivel muy básico, los patrones tradicionales de GoF le permiten desacoplar componentes de un sistema mediante la introducción de actores en los que se delega cierta responsabilidad. En ese sentido, en un sistema diseñado siguiendo estos principios resulta mucho más fácil “delegar” algunas funciones en componentes remotos que se ejecutan en otro nodo. Este es el principio básico detrás de los poderes.

Sin embargo, esto generalmente no es suficiente. El diseño también debe considerar la comunicación entre los componentes y tratar de minimizar las interacciones remotas. El diseño puramente OO funciona mal cuando se distribuye porque las interacciones entre los componentes entre los nodos no están optimizadas. La solución es descomponer el sistema en componentes para que las interacciones se minimicen o, al menos, puedan ser asíncronas.

Esta es la razón por la cual los patrones de diseño de nivel superior, también llamados salidas de patrones arquitectónicos para los sistemas distribuidos. Esta es la idea básica del libro “Pattern-Oriented Software Architecture Volume 4: A Pattern Language for Distributed Computing” de Frank Buschmann.

Verá que muchos patrones de comportamiento como el Comando resultan muy útiles al implementar los patrones arquitectónicos. Otros, como los patrones de creación, son menos significativos (sin embargo, ¡es común usar fábricas para crear proxies para objetos remotos!).

En resumen, conocer los patrones de diseño básicos hace que cualquier sistema sea más adaptable a los cambios, incluido el cambio de centralizado a distribuido, pero no son suficientes para garantizar que los sistemas resultantes funcionen bien.