He usado Rails durante más de 4 años, así que obviamente me gusta Rails y me gusta hacer cosas como Rails Way y, a veces, sin saberlo, me paso al lado oscuro.¿Usamos Rails ActiveRecord como estructura híbrida, es decir, estructura de datos + objeto?
Recientemente recogí Clean Code por Uncle Bob. Estoy en el Capítulo 6 y estoy un poco confundido acerca de si los desarrolladores de los raíles rompemos la regla fundamental del diseño OO, es decir, la Ley de Demeter o la encapsulación. La Ley de Demeter establece que un objeto no debe conocer las entrañas de otro objeto y no debe invocar métodos sobre objetos que son devueltos por un método, porque cuando haces eso sugiere que un objeto sabe demasiado sobre el otro objeto.
Pero muy a menudo llamamos métodos a otro objeto desde un modelo. Por ejemplo, cuando tenemos una relación como 'Un pedido pertenece a un usuario'. Entonces muy a menudo terminamos haciendo order.user.name o para evitar que parezca un accidente de tren, configuramos un delegado para hacer order.name.
No es que todavía como romper la Ley de Demeter o encapsulación?
La otra pregunta es: ¿ActiveRecord es solo una estructura de datos o un objeto de transferencia de datos que interactúa con la base de datos?
En caso afirmativo, ¿no creamos una estructura híbrida, es decir, medio objeto y mitad de estructura de datos al poner nuestras reglas comerciales en los modelos ActiveRecord?
Nunca tome los libros demasiado en serio. Excepto "Código Completo" por supuesto. – vava
Tales "reglas" y "leyes" son solo sugerencias para hacer que el código esté limpio. Cuando es más limpio violarlos, solo hazlo. – luikore
Definitivamente puedo violar una regla intencionalmente si sé que esta violación no va a causar un problema de diseño a largo plazo y, sobre todo, si hay una manera de lograr un código más limpio sin violar ninguna regla, esa será la ruta preferible:) – nas