Sto cercando di implementare Strategy Pattern per gestire la serializzazione e la deserializzazione del contenuto. Quindi ho quattro tipi di richieste, ovvero CREA, RECUPERA, AGGIORNA, ELIMINA e per ogni richiesta desidero serializzare / deserializzare il contenuto della richiesta e della risposta.
public interface ContentHandler{
String serializeRequest(Content con)();
String serializeResponse(Content con)();
Content deserializeRequest(String str)();
Content deserializeResponse(String str)();
}
Ora avrò quattro classi:
public class CreateContentHandler implements ContentHandler{
String serializeRequest(Content con){
// .........
}
String serializeResponse(Content con){
// ........
}
Content deserializeRequest(String str){
}
Content deserializeResponse(String str){
}
}
public class RetrieveContentHandler implements ContentHandler{
//.........
}
public class UpdateContentHandler implements ContentHandler{
//.........
}
public class DeleteContentHandler implements ContentHandler{
//.........
}
Ora ho il requisito di gestire diversi tipi di contenuto come JSON, XML, CUSTOM-TYPE. Quindi serializza i contenuti in modo JSON o XML.
Quindi stavo pensando di passare una variabile contenType a ciascuna funzione e gestire il contenuto all'interno di ciascuna funzione avendo casi di switch.
String serializeRequest(Content con, ContentType type){
// ....
switch(type){
case JSON:
case XML:
}
}
Ma penso che questo renderà la mia funzione serialize grande con quattro diversi tipi di gestione. Ho tre variabili serialize / deserialize, request / response, xml / json / cutom.
Come posso aggiungere nuove interfacce o classi per soddisfare diversi tipi di contenuti al design attuale ??
Modifica Non sto facendo la mia serializzazione in questo modo come hai detto usando alcuni metodi:
String createStringNode(...);
String openSubbloc(...);
... // you have to analyze your switch blocks to determine the primitives
Gestisco la serializzazione / deserializzazione JSON usando un Jackson (libreria JSON).
Quindi, quello che faccio è impostare alcune proprietà di ObjectMapper
che serializza / deserializza i dati in ogni richiesta.
// JSON serialization
objectMapperPropertiesBuilder = new ObjectMapperPropertiesBuilder();
objectMapperPropertiesBuilder.setSerializationFeature(SerializationFeature.WRAP_ROOT_VALUE); objectMapperPropertiesBuilder.setInclude(Include.NON_DEFAULT);
jsonPayload = JsonUtils.toJsonString(payload, objectMapperPropertiesBuilder.build());
Analogamente per XML, userò una libreria e ne imposterò alcune proprietà. Quindi, come posso implementare la strategia XMLForamtter, JSONFormatter in questo caso ??
Come ogni richiesta / risposta, il contenuto sarà diverso, quindi il processo di serializzazione / deserializzazione sarà diverso (saranno impostate diverse proprietà).
Mi manca qualcosa ??