Duda con parcial Copia.me #436
-
Beta Was this translation helpful? Give feedback.
Replies: 3 comments
-
👋 ¡Hola!
Son parte del sistema. Eso no significa que tengas que implementarlos todos ellos durante el parcial, pero sí tenés que plantear como vas a hacer para soportarlos (de forma intercambiable), teniendo en cuenta la consideración de que son costosos en términos de cómputo, es decir, requieren de una cantidad de ciclos de CPU no despreciable.
Es cierto que, por diferentes motivos, podrías decidir extraerlos a nodos independientes en una arquitectura distribuida (tema que retomaremos durante el segundo cuatrimestre), pero más allá de ello, no hay ningún impedimento para que sean parte del sistema: son algoritmos conocidos (sin ir mas lejos, por ejemplo la biblioteca apache commons contiene una implementación de la distancia de Levenshtein, la cual podrías ejecutar dentro de tu ambiente de objetos), no requieren interactuar con datos externos, ni están sujetos a licencias de servicio. En otras palabras, no debería resultar raro que estos algoritmos estén parcial o totalmente implementados, en mayor o menor medida, dentro de nuestro sistema, sobre todo si estos fueran elementos diferenciales de nuestro producto. Más aún: no veo buenos motivos para asumir que se ejecutan externamente. En todo caso, y releyendo tu pregunta, calculo que estás pensando en que los mismos estén implementado utilizando bibliotecas externas. Eso sí podría ser posible (nuevamente, como en el caso de la distancia de Levenshtein que provee Apache Commons), pero no cambia sustancialmente a tu diseño.
Acá hay bastante tela para cortar. A priori, no veo un problema de cohesión, siempre y cuando la implementación del algoritmo sea sencilla o se delegue en una biblioteca (externa o no) que provea abstracciones stateless o fáciles de instanciar. Por ejemplo: class Texto {
validarAutomaticamente(otroDocumento) {
return new LevenshteinDistance().apply(this.contenido, otroDocumento.contenido) < 0.5
}
} Ahora bien, si la implementación fuera más compleja o difícil de instanciar, entonces sí entendería tu argumento en favor de la cohesión y valdría la pena extraer componentes independientes para realizar las validaciones. No estoy seguro de qué ventaja te daría que todos estos componentes implementaran una misma interfaz; de hecho, si para cada tipo de documento tuvieras exactamente un algoritmo validador, entonces incurrirías en un problema de jerarquía paralelas. Es más, ni siquiera se si podrías llevarlos todos a una misma interfaz fácilmente, dado que operarían con diferentes tipos de datos (secuencias de bytes, strings, etc) Por otro lado, si para cada tipo de documento existieran múltiples formas de validarlo, entonces ahí se justificaría desacoplar las ideas del documento y sus algoritmos de validación, para ganar flexibilidad. Pero ya estaríamos hablando de otro requerimiento y otro problema. |
Beta Was this translation helpful? Give feedback.
-
Beta Was this translation helpful? Give feedback.
-
Perfecto quedó clarísimo, me la estaba complicando yo sola con los algoritmos 😅😅. Muchas gracias! |
Beta Was this translation helpful? Give feedback.
👋 ¡Hola!
Son parte del sistema. Eso no significa que tengas que implementarlos todos ellos durante el parcial, pero sí tenés que plantear como vas a hacer para soportarlos (de forma intercambiable), teniendo en cuenta la consideración de que son costosos en términos de cómputo, es decir, requieren de una cantidad de ciclos de CPU no despreciable.
Es cierto que, por diferentes motivos, podrías decidir extraerlos a nodos independientes en una arquitectura distribuida (tema que retomaremos durante el segundo cu…