UTNianos

Versión completa: [Pedido] Final 14/02/2015 - DDS
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Páginas: 1 2
Buenas, alguien que se haya presentado este sabado y que pueda acercar algo de lo que se tomó? En el site de la cátedra http://www.ddsutn.com.ar/material/reposi...e-examenes no lo subieron y me huele a que esa fecha lo preparo algún docente de la "vieja camada", la cursé con Dodino y escuché eso de que se "turnan" para preparar los finales :/

SaludoS!!
Me uno al pedido!
Yo también me sumo al pedido!
Revivo el post: ahora si lo subieron
https://docs.google.com/document/d/1IZ3U...dit?pli=1#


Alguien lo trato de encarar? Me esta costando bastante el tema de las reglas =P
Hola matheu25
Yo pensé directamente en una colección de condiciones. Donde antes de generar valide si esta todo en orden..
Si bien se parece mucho al observer, por que al validar haces algo como:
coleccion.each[i t.validar(...) ]
Pero una ventaja es que el observador esta desacoplado del observado y aca no, por que para seguir en algun momento le tiene que comunicar si se cumplio o no...por eso lo descarte.
Un decorador es imposible pq no puede agregar y quitar dinamicamente, es un problema quitar.
Y hay un strategy en el medio por que fijate que algunas condiciones dependen del tipo de préstamo.
Al principio pensé lo mismo! Pero despues me complique viendo como modelar la condicion. Como lo harias?

Despues pense y finalmente decidi agregar las validaciones comunes a todos los tipos de prestamo en la clase prestamo, y despues que cada tipo de prestamo redefina el validar haciendo obviamente un super.validar y ademas cumpliendo sus propias condiciones (una especie de template =P).

Edit: no se si es la mejor forma, pero yo creo que si explicas tanto virtudes como defectos de buena manera, y se cumple la funcionalidad, deberia estar mejor/peor, pero bien.
matheu25

Igual aca falta un diagrama de clases para ver como lo pensaste vos y todo eso.

Cita:Al principio pensé lo mismo! Pero despues me complique viendo como modelar la condicion. Como lo harias?

Ponele.. "que el monto de cada cuota no exceda los $ 10.000 (esto se calcula en base al monto a prestar * tasa de interés / cantidad de cuotas) "

Llega a ese momento que le da a validar a cada condicion. Ponele en

Spoiler: Mostrar
#monto
>>validar(unPlan)
unPlan.respetaMonto(..)

#Plan
>>respetaMonto(..)
prestamo.respetaMonto(self)

Acá es importante, que te des cuenta que es común a todos los prestamos y se tiene que cumplir que cuando el préstamo sea combinado tmb se respete.

#prestamoSimple
>>respetaMonto(unPlan)
...Y aca haces todo lo que dice ahi...

Cita:Despues pense y finalmente decidi agregar las validaciones comunes a todos los tipos de prestamo en la clase prestamo, y despues que cada tipo de prestamo redefina el validar haciendo obviamente un super.validar y ademas cumpliendo sus propias condiciones (una especie de template =P).

Y como hiciste con el combinado? Como resolviste eso? Aca es imp un diagrama =P asi quea bien claro. No seria al 100% un templated method, por que no se puede redefinir la operacion completa.. es solo una partecita.

A mi tambien me hace un poco de ruido solo usar condiciones, pero bueno con esos fundaments que te puse.. lo justificaria.
Hiciste algo mas? Rendis ahora el 27?
Claro, pero al fin y al cabo la regla termina siendo un pasamanos y no quien tiene las condiciones a cumplir, o no?

Cita:Y como hiciste con el combinado? Como resolviste eso? Aca es imp un diagrama =P asi quea bien claro. No seria al 100% un templated method, por que no se puede redefinir la operacion completa.. es solo una partecita.

El combinado lo modele con una lista de otros prestamos, con lo cual se validaria el plan completo si se validan los planes de cada prestamo que compone al combinado. Es verdad que no es un template completo pero tiene un poco de la idea jajaja.

Cita:A mi tambien me hace un poco de ruido solo usar condiciones, pero bueno con esos fundaments que te puse.. lo justificaria.
Hiciste algo mas? Rendis ahora el 27?

Off-topic:

Asi es, doy el 27, vos? De este no hice nada mas jaja, pase a otro porque me pudri wall. Me puse a hacer el del 28/02
matheu25

Cita:Claro, pero al fin y al cabo la regla termina siendo un pasamanos y no quien tiene las condiciones a cumplir, o no?
No entiendo a que decis con pasamanos. Como te puse la de monto, hice todas asi

Cita:El combinado lo modele con una lista de otros prestamos, con lo cual se validaria el plan completo si se validan los planes de cada prestamo que compone al combinado. Es verdad que no es un template completo pero tiene un poco de la idea jajaja.

Yo acá tengo dudas, pq en realidad yo puse que el plan podría tener un préstamo simple y otro combinado.. pero no se como es que se distribuyen las cuotas y el monto, y esto se complica para los combinados.. asi que no se si estaría mejor, que en vez que plan conozca a prestamo como hice.. que préstamo conozca a plan.
Pero dude con "validar el plan de pagos de cada uno de los clientes" que dice el enunciado.

Nono, tengo muchas dudas.. la patie a julio. Si queres revisar algo mas, yo hice todos.. tengo mis dudas. TE paso mi mail por mp y seguimos ahi.
CarooLina
matheu25

hola, alguno lo pudo terminar ?

les paso lo que tengo hasta ahora, pero no se bien como plantear esto:
Cita: "En el caso de los préstamos combinados, deben aceptar todas las combinaciones anteriores."

La persistencia la resolvi con mapeo tabla por clase concreta porque hay muchos atributos diferentes para cada uno de los prestamos simples

Otra cosa, me parece que deberia haber un "repositorio de condiciones" o algo por el estilo. de esa forma, es facil agregar/eliminar las condiciones que deberian los planes teniendo en cuenta cada tipo de prestamo. Los prestamos deberian acceder a ese singleton y traer las condiciones porque de otra forma, si cada prestamo tiene una coleccion de condiciones, entonces no siempre se valida igual.

Basicamente lo que hice en objetos es que cuando se crea un prestamo para un cliente, se le pasa el plan. el prestamo valida que el plan cumpla con todas las condiciones, y, si es asi, lo agrega como su plan.
dicho de otra forma, un prestamo se crea solo si el plan de pagos que se le pasa es valido.

Como lo terminaron de resolver ustedes ? Lo que mas me confunde es la parte de los prestamos combinados.

Edit: faltan algunos datos (atributos, operaciones) en el diagrama de clases, pero se entiende creo
edit2: lo que viene a continuacion esta mal en general

Persistencia:

Spoiler: Mostrar
[Imagen: Drawing8_Copy.png]

Objetos:

Spoiler: Mostrar
[Imagen: Class_Model2_Copy.png]

Codigo:

Spoiler: Mostrar


interface Condicion
metodo verifica(plan: Plan, prestamo: Personal)
metodo verifica(plan: Plan, prestamo: Prendario)
metodo verifica(plan: Plan, prestamo: Hipotecario)


clase MinMax implementa Condicion
metodo verifica(plan: Plan, prestamo: Prendario)
retornar plan.monto().lessThan(10000)
fin

metodo verifica(plan: Plan, prestamo: Hipotecario)
retornar plan.monto().greaterThan(150k)
fin

metodo verifica(plan: Plan, prestamo: Personal
retornar plan.monto().between(20k,40k)
fin

clase CuotasMenores implementa Condicion
atributo maximo

metodo cuotaMenorAMaximo(plan)
retornar plan.valorCuota().lessThan(maximo)
fin


metodo verifica(plan: Plan, prestamo: Prendario)
retornar cuotaMenorAMaximo(plan)
fin

metodo verifica(plan: Plan, prestamo: Hipotecario)
retornar cuotaMenorAMaximo(plan)
fin

metodo verifica(plan: Plan, prestamo: Personal)
retornar cuotaMenorAMaximo(plan)
fin


clase ValorNominalMenorAPorcentaje implementa Condicion
atributo porcentaje

/* implementar metodos */

clase TasaInteresNoExcedePorcentaje implementa Condicion
atributo porcentaje

/* implementar metodos */


clase MenosDeNCuotas implementa Condicion
atributo n: Numero

/* implementar metodos */


clase Prestamo
atributo _cliente: Cliente
atributo condiciones: Set<Condicion>
atributo planDePago: Plan

constructor Prestamo(cliente, plan)
actualizar _cliente = cliente
self.setPlan(plan)

metodo setPlan(plan: Plan)
if(planValido(plan))
actualizar planDePago = plan
else
lanzar nueva Exception("el plan no cumple con las condiciones")
fin

metodo planValido(plan: Plan)
retornar condiciones.allSatisfy[:cond | cond.verifica(plan,self)]
fin



clase Simple hereda Prestamo

clase Personal hereda Simple
clase Prendario hereda Simple
clase Hipotecario hereda Simple

clase Combinado hereda Prestamo
atributo prestamos: Coleccion<Simple>




Lo de prestamos me quedan algunas dudas del dominio.
Sobretodo del plan, cada prestamo tiene su plan.. pero si es combinado? Cada prestamo simple tiene su plan no? (eso lo preguntaria) por que sino como diviids las cuotas, el monto..blabla.
Lo que tambien preguntaria respectoa eso que decis es que si se quiere que combinado tenga mas combinados (seria un composite) y nada mas.

La parte de prestamo la tengo igual. Por ahi me presentaban dudas entre la relacion cliente-plan-prestamo, vos pusiste que prestamo conoce a plan y no que prestamo simple conoce a plan, igual creo que esto es mas una duda de dominio.. como te dije arriba.

Esto no me gusta, vos tenes que usar polimorfismo.. sin importar que prestamo estes validando a todos hablarles de la misma manera, mañana te meten uno nuevo y tenes que toquetear todo. Los metodos de cada prestamo (para su validacion) a menos que sean comunes, los mandas a las clases concretas.

metodo verifica(plan: Plan, prestamo: Prendario)
retornar cuotaMenorAMaximo(plan)
fin

metodo verifica(plan: Plan, prestamo: Hipotecario)
retornar cuotaMenorAMaximo(plan)
fin

metodo verifica(plan: Plan, prestamo: Personal)
retornar cuotaMenorAMaximo(plan)
fin

Y el der, no podes usar eso por que vos queres hacer consultas polimorficas y la clase concreta no te lo permite. Esperaba que uses un joined o single table
coincido en casi todo, el dominio es muy confuso. lo que no se es si ese tipo de dudas se pueden preguntar en el final o te contestan la tipica "hace lo que entendiste y justifica"

en fin.. vos mas o menos como planteaste esta parte:

Cita:El usuario nos pidió que sea fácil incorporar o eliminar estas validaciones, ya que va a haber un período de evaluación de 2 años de este módulo y es probable que surjan varios cambios en las reglas de negocio que determinan los planes.

digo porque obviamente hay una coleccion de reglas de validacion por las que debe pasar el plan.
la pregunta es... en donde esta/vive esa coleccion ( en prestamo ? en prestamo simple ? en prestamo combinado ? en plan ? en otro objeto que no aparece a simple vista ? )

yo dudo que este en prestamo. porque si cada prestamo tiene su coleccion, yo podria tener cada prestamo con una coleccion distinta y entonces no todos los prestamos validan igual (si me olvido de cargar una de las reglas en un prestamo por ejemplo).

idem para plan; si cada plan tiene una coleccion y en uno de los planes me falto setear una regla ....

hacer un template method en prestamo tampoco puede ser porque ya deja de ser facil lo que querian que sea facil.

???? wall
Vas a seguir manteniendo esos metodos que te marque mas arriba?
Vos decis que cada prestamo tenga una coleccion de validaciones?
(25-01-2016 10:02)CarooLina escribió: [ -> ]Vas a seguir manteniendo esos metodos que te marque mas arriba?
Vos decis que cada prestamo tenga una coleccion de validaciones?

no no, nada que ver. llegue a plantear eso. el tema es que estoy dudando con lo que pregunte. es decir, como hacer para que "sea facil agregar..." , y ademas, a que objeto perteneceria la coleccion de validaciones ( si es que coincidimos que en algun lugar hay una coleccion de validaciones, que creo que si )

necesito sacarme esas dudas para replantear todo de nuevo.

en general lo que mas me confunde del enunciado son las frases:

Cita:....y sirve para determinados tipos de préstamo.

Cita:En el caso de los préstamos combinados, deben aceptar todas las combinaciones anteriores.
cuchodelosdecadentes

Si eso si, lo de las validaciones coincidimos.
La duda que yo tengo del dominio es que si cada prestamo simple tiene su plan, por que si es combinado (que tiene varios simples) no tenes forma de saber cuantas cuotas son para cada uno o eso, no se si se entiende.. no me queda claro como harias las validaciones. Salvo que sea el mismo plan para todos los prestamos, el mismo monto, cuotas.. pero eso me suena raro. Esto es algo que se tiene que preguntar.

Y las validaciones, la colección.. depende de como hiciste vos la relacion plan-cliente-prestamo (ahora me fijo y te edito que hice yo)

Cita:....y sirve para determinados tipos de préstamo.
Los distintos modos que tiene.

Y lo otro es que vas a tener que validar cada préstamo en combiando, entonces tiene que aceptar todas. Y le hablaas a todas de la misma manera

No te olvides de eetiquetarme por que vi que comentaste hoy de casualidad! No me aparecio en el portal
Páginas: 1 2
URLs de referencia