delucas.blog!

sobre mí

El principio -er -er

04 Oct 2013 | programación uncle-bob

Hace aproximadamente un mes me encontré con un correo en la lista de Clean Coders que me llamó la atención. Decidí dejarlo estacionar un tiempo y luego compartirlo.

Nota: Voy a traducir ambos correos, tomándome la licencia de llenar con vínculos el texto plano. Además me tomaré la licencia de localizar algunas expresiones.

Mensaje inicial

De: Guille Rugilo, el Miércoles 4 de Septiembre de 2013 a las 11:44 PM

Para: cleancodediscussion@googlegroups.com

Hola Uncle Bob:

He visto en tus Code Casts y en un montón de ejemplos del libro Clean Code, un montón de clases terminando en “er”, como NameInverter, SuiteResponder, SetupTeardownIncluder, y así.

Entonces me pregunté sobre qué pensás al respecto del Principio ‘er er’ de Peter Coad ¿Creés que es útil?

¡Gracias por anticipado!

Guille.

Respuesta

De: Uncle Bob, el Lunes 9 de Septiembre de 2013 a las 4:43 AM

Para: cleancodediscussion@googlegroups.com

Los nombres de las clases deben ser sustantivos; y deben ser específicos. Un nombre como ResourceManager o DataAnalyzer es inespecífico. El nombre realmente no te dice lo que la clase hace.

Por otro lado, un nombre como NameInverter es muy específico. Una vez que viste ese nombre, tenés una idea realmente buena sobre que es lo que esa clase hace.

El Principio ‘er er’, que dice “No hagas objetos que terminen con er” intenta llegar a esta idea de especificidad. Además intenta llegar a otro punto.

Las clases deben ser cosas que se comporten, no motores que actúen sobre cosas. En ese sentido la clase NameInverter falla porque un NameInverter opera sobre un Name.

La solución simple es poner el código de inversión del nombre dentro de la clase Name. Pero esto lleva a violaciones del Principio de Responsabilidad Única dado que hay muchos usuarios de Name que nunca van a invertir el nombre.

Podemos arreglar esto creando un InvertableName que puede ser construído en base a un nombre. Pero esto significa que vas a tener muchos tipos diferentes de nombres que tienen diferentes capacidades, y que para invocar esas capacidades tenés que convertir de una forma a la otra…

Podés volverte loco siguiendo llevándolo tan lejos.

La simple verdad es que a veces realmente queremos motores que operen sobre cosas, y por eso hay veces en que toleramos clases que terminen en ‘er’, siempre y cuando sean muy específicas.

Más claro, échele agua.

comments powered by Disqus