Chain of Responsiblity (CoR) Pattern and .NET

 
Of all DPs, why do I choose the Chain of Responsibility (CoR) DP to continue this chat on DPs?
 
Well, I guess that the idea of .NET as "loaded with DPs", sounds powerful, but I thought that it would be nice to add some more substance to the concept that just a catchy phrase.
 
Let’s start with the definition of the Chain Of Responsibility pattern:
 
"Avoid coupling the sender of a request to its receiver by giving more than one object a chance to handle the request.
Chain the receiving objects and pass the request along the chain until an object handles it."
 
Well, does that ring any bells?
 
Any .NET developers out there?
 
Does that sound remotely (no pun intended) similar to anything that we all use in .NET on a daily basis?
 
Well, it should: Exception Handling!!!
 
Yes, Exception handling in .NET (as well as in other OO languages, like Java, to name one) is based on the Chain of Responsibility DP.
 
Just to make the obvious more obvious, in this case, the chain is embodied by the call stack.
 
The receiving objects are all chained through the call stack, and the exception is passed from object to object in the call stack until one of them (or none at all, in which case the application exits to the OS) handles the exception.
 
This pattern helps to illustrate how true OO design plays with abstraction, indirection, and delaying design decisions.
 
 
 
El Patrón Cadena de Responsabilidad (CoR) y .NET
 
 
De todos los DPs, por qué elijo el DP Cadena de Responsabilidad (CoR) para continuar esta charla sobre DPs?
 
Bueno, supongo que la idea de .NET como "cargado con DPs" suena poderosa, pero pensé que sería interesante el agregarle algo mas de sustancia al concepto que tan sólo una frase cautivante.
 
Partamos de la definición del patrón Cadena de Responsabilidad:
 
"Evitar acoplar el remitente de la solicitud con su receptor al permitir a mas de un objeto la oportunidad de manejar la solicitud.
Encadenar los objetos receptores y pasar la solicitud a lo largo de la cadena hasta que algún objeto la maneje."
 
Bueno, acaso suena a algo conocido?
 
Hay algún programador .NET por ahí?
 
(cri, cri …)
 
Suena si quiera remotamente (juego de palabras no intencional) similar a algo que todos usamos en .NET en forma diaria?
 
Pues bien, así debería ser: el manejo de excepciones!!!
 
Así es, el manejo de excepciones en .NET (al igual que en otros lenguajes OO, como Java, por nombrar uno) esta basado en el DP Cadena de Responsabilidad.
 
Para hacer más obvio lo ya obvio, en este caso, la cadena esta corporizada por el call stack.
 
Los objetos receptores están todos encadenados a través del call stack, y la excepción es pasada de objeto en objeto en el stack hasta que uno de ellos (o ninguno, en cuyo caso la aplicación termina abruptamente y retorna al sistema operativo) maneja la excepción.
 
Este patrón ayuda a ilustrar de que forma un verdadero diseño OO juega con los conceptos de abstracción, indirección y el retraso de decisiones de diseño.
 
 
Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s