@@ -61,25 +61,54 @@ de servicios aparte, donde un fichero de servicios es simplemente un fichero
6161Python en el que se incorpora todo el código relativo a un dominio o
6262aplicación.
6363
64- ### Asigna nombres únicos a ficheros, clases y funciones
64+ Veamos, por ejemplo, la _ app_ ` notice ` , que se usa para enviar notificaciones
65+ a los miembros ante determinados eventos, como por ejemplo el aviso un mes
66+ antes de que se venza su permanencia a la organización.
67+
68+ En la clase ` apps.notice.models.Notice ` se definen algunos métodos, pero
69+ solo aquellos que afectan o cambian el estado del propio modelo, sin
70+ ninguna tercera parte implicada. En concreto, no existe un método
71+ para enviar la notificación en si.
72+
73+ Este acto de enviar la notificación está implementado por separado, dentro del
74+ módulo ` apps.notica.tasks ` , primero porque es relativamente complejo y segundo,
75+ e incluso más importante, porque involucra a más elementos que el ` notice ` en
76+ cuestión: implica saber de la existencia de un sistema de colas, del subsistema
77+ de envío de mensajes ([ sendgrid] ( https://sendgrid.com/ ) en nuestro caso), etc.
78+
79+ En resumen, se recomiendo que las clases definan métodos unicamente para
80+ consultar o cambiar su estado interno, pero que cualquier interacción con
81+ otras clases o componentes debe realizarse fuera de la clase, preferiblemente
82+ en un módulo aparte.
83+
84+
85+ ### Asigna nombres únicos a las clases
86+
87+ Hay muchas razones para esto, pero veamos solo una. Si nos encontramos con una
88+ nueva clase mientras examinamos el código, lo deseable es que una búsqueda o un
89+ _ grep_ por el nombre de la clase nos devuelva solo la definición y los usos de
90+ la misma. Cualquier otra cosa que aparezca será ruido. Si tengo dos clases con
91+ el mismo nombre en ficheros diferentes, esto solo complica el entender en que
92+ contextos y de que forma se usa cada una de las clases. Razones similares se
93+ pueden argumentar para las variables o constantes globales.
94+
95+ De la misma forma que no existe en español dos sinónimos que signifiquen
96+ _ exactamente_ lo mismo (Siempre hay algún matiz que los diferencia) no deberían
97+ existir en nuestro programa dos clases que se llamen exactamente iguales,
98+ porque, si fuera así, ¿por qué no son la misma?
99+
100+ Tenemos ahora mismo en nuestro código un ejemplo de dos clases con el mismo
101+ nombre, la clase ` Membership ` en ` organization.models ` y la clase
102+ ` Membership ` en el módulo ` members.models ` . Es verdad que el programa
103+ funciona, porque las clases están aisladas en sus propios módulos, pero hubiera
104+ sido preferible haber buscado otro nombre que no estuviera en conflicto con uno
105+ ya existente (` @jileon ` : Yo lo sé bien ya que fui yo el que creó la clase
106+ duplicada).
65107
66- Excepción hecha de los nombres de las variables locales a funciones y métodos,
67- cada entidad con nombre en nuestro código debería tener un nombre único.
68-
69- Hay muchas razones para esto, pero veamos por ejemplo las clases. Si nos
70- encontramos con una nueva clase mientras examinamos el código, lo deseable es
71- que una búsqueda o un _ grep_ por el nombre de la clase nos devuelva será la
72- definición y los usos de la misma. Cualquier otra cosa que aparezca será ruido.
73- Si tengo dos clases con el mismo nombre en ficheros diferentes, esto solo
74- complica el entender en que contextos y de que forma se usa cada una de las
75- clases. Razones similares se pueden argumentar para las funciones, métodos
76- (Excepto en casos de herencia, claro) y variables o constantes globales.
77108
78109### Funciones vs clases para vistas
79110
80111Para las vistas, preferimos, en general, usar funciones en vez de vistas
81112basadas en clases. En ningún caso debe entenderse esta recomendación como una
82113prohibición de usar _ CBV_ , es solo que preferimos usarlas para casos sencillos
83114y/o triviales, y usar funciones para todo lo demás.
84-
85-
0 commit comments