jorgejcabrera / rent-app-service

0 stars 0 forks source link

xq no validar esto en el constructor? #10

Closed maurociancio closed 2 years ago

maurociancio commented 2 years ago

https://github.com/jorgejcabrera/rent-app-service/blob/ddadfd7c56b660e1e14153d27e7b528f4e45ce31/src/main/groovy/com/fiuba/rent_app/domain/order/Order.groovy#L67

jorgejcabrera commented 2 years ago

No es necesario porque la forma de crear ordenes es instanciándolas a través del OrderBuilder, y éste es el que tiene la lógica de cuál es la manera válida de crear la orden

maurociancio commented 2 years ago

mmmm no me cierra del todo. xq no usar el connstructor que es el lugar ideal para validar si se puede o no construir eso? xq necesitar de un builder cuando un constructor alcanza.

por otro lado:

 Order order = new Order(
            lender: item.lenderId,
            borrower: borrowerId,
            createdAt: now(),
            item: item,
            status: OPEN
    )
    if (!order.isValid()) {
        throw new InvalidRenterException("The borrower ${order.getBorrower()} can't be the owner of the ${order.getItem().getId()} item")
    }
    order

xq permitir la construccion de un objeto y luego preguntarle si es valido? xq no directamente lanzar la excepcion en el constructor? poder construir un objeto y que ese objeto este en un estado invalido complica un poco las cosasa

jorgejcabrera commented 2 years ago

Es verdad tiene sentido. Destrui el builder de la orden y ahora el constructor realiza todas las validaciones https://github.com/jorgejcabrera/rent-app-service/blob/master/src/main/groovy/com/fiuba/rent_app/domain/order/Order.groovy#L52.

Quizas hubiese tenido mas sentido el builder si la logica de creacion del objeto hubiera sido mas compleja y el constructor de la clase privado -de manera tal que solo se instancien objetos a traves del builder.