vendredi 12 octobre 2018

Suitable design pattern for the task

The database contains rows of types: TYPE1, TYPE2, TYP3, TYPEN

When user send request to my service and wait response I make next:

1) Call responseService for response:

@Override
public GetResponseResponse getResponse(GetResponseRequest request) 
       return responseService.getResponse(request);
}

2) In responseService prepare response:

@Override
@Transactional
public GetResponseResponse getResponse(GetResponseRequest request) {

    //get data from DB
    SmevMessage smevMessage = smevMessageService.findOneFinished(request.getP1(), request.getP2());

    //validate

    //create general response for all TYPES of response
     GetResponseResponse getResponseResponse = new GetResponseResponse();

    //get Builder for concrete resonse part
    UnpResponseBuilder unpResponseBuilder = unpResponseBuilderContext.getResponseBuilder(smevMessage.getRequestType());
    Element element = unpResponseBuilder.createResponse(smevMessage);

    //set part to general response
    getResponseResponse.setAny(element);

    return getResponseResponse;
}

I generate general response but each response has specific part for each type. I use strategy design pattern for this.

I have some imlementation of this interface:

public interface UnpResponseBuilder {
    Element createResponse(SmevMessage smevMessage);
}

and one bean - context:

public interface UnpResponseBuilderContext {
    UnpResponseBuilder getResponseBuilder(SmevMessageType smevMessageType);

    void setBuilder(SmevMessageType smevMessageType, UnpResponseBuilder bean);
}

My question: Is it right to use strategy for this task? Can something else be possible? If the strategy fits the right names for UnpResponseBuilderContext and UnpResponseBuilder ?

Aucun commentaire:

Enregistrer un commentaire