¿Cómo deben usarse los métodos separados?

7

Entre otras cosas, el CQRS tiene una regla de que cada uno de los métodos tiene una responsabilidad. Así que no podemos tener esto en el modelo:

public class Store {
    public Item getOrCreateItem(int id)
    {
        //logic
    }
     //....
}

y esto en el controlador:

Store store = new Store();
Item item = store.getItem(1);

Debemos tener esto en el modelo:

public class Store {
    public Item createItem()
    {
        //logic
    }
    public Item getItem(int id)
    {
        //logic
    }
     //....
}

lo que lleva a esto en el controlador:

Store store = new Store();
Item item = store.getItem(1);
if (item !== null) {
    Item item = store.createItem();
}

Pero ahora tenemos mucho código en el controlador ...

¿Hay alguna forma mejor de separar los métodos que tener el código adicional en el controlador, que debería contener poco código?

    
pregunta losasafo 22.02.2018 - 21:53

2 respuestas

20

Oh por gritar en voz alta.

El controlador no tiene por qué saber qué tiene detrás su implementación de getThingy() . Si getThingy() crea o distribuye una copia en caché no es asunto suyo. La única razón por la que este detalle de implementación se filtró fuera de la tienda y en el controlador fue porque no confiaba en la tienda para simplemente "de alguna manera" ponerle una cosa. Una vez que empiezas a pensar que sabes "cómo", desde afuera, de repente te encuentras atrapado haciendo lo que se espera. Eso no es abstracción.

Si estás pensando "pero los supuestos no deben ser fábricas", entonces está bien. Nómbrelo thingy() .

Si estás pensando "pero tengo otras cosas que necesitan cambiar de manera diferente" entonces bien. Nómbrelo controllersThingy() .

Si todo lo que pido es una cosita, solo dame mi cosilla. No me importa como Deja de decirme cómo.

    
respondido por el candied_orange 22.02.2018 - 23:28
2

Normalmente, uno tendría un Servicio que proporcionaría este tipo de funcionalidad. El Controlador llamaría algo como StoreService.EnsureItemExists (1).

El modelo probablemente tampoco debería hacer mucho: la mayoría de la lógica de negocios debe residir en el servicio.

    
respondido por el autophage 22.02.2018 - 22:03

Lea otras preguntas en las etiquetas