Design pattern per detenere scambi di API? [chiuso]

0

Sto sviluppando una semplice applicazione che esegue la scansione nelle pagine Web per ottenere alcune informazioni. Per questo ho usato e testato alcune librerie, come crawler4j, jsoup, jaunt e htmlunit. Ho scambiato più volte un'API con un'altra perché a volte ho percepito che mi è servito meglio in determinate funzioni rispetto a quello che stavo usando. Potrei doverlo fare altre volte e ogni volta che lo faccio dovrò aggirare il codice facendo vari refactoring.

Quindi decido di separare le chiamate per queste API in una sorta di classi incapsulate che contiene tutte le operazioni che devo fare con questa API.

Esiste un modello di progettazione per mitigare questo problema?

Sotto un semplice esempio che uso il suffisso "Handler":

MODIFICA la versione finale:

public interface CrawlerApiHandler {
    String visit (String url);
}

public class JsoupCrawlerApiHandler implements CrawlerApiHandler {
    public static final String USER_AGENT = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.152 Safari/537.36";

    @Override
    public String visit(String url) {
        try {
            return Jsoup.connect(url).timeout(20000)
                    .userAgent(USER_AGENT).get().toString();
        } catch (IOException e) {
            //LOG
            return "";
        }
    }
}

public class JauntApiHandlerImpl implements CrawlerApiHandler {
    UserAgent userAgent;

    public JauntApiHandlerImpl(UserAgent userAgent) {
        this.userAgent = userAgent;
    }


    @Override
    public String visit(String url) {
        try {
            return userAgent.visit(url).toString();
        } catch (ResponseException e) {
            return "";
        }
    }
}
    
posta alexpfx 30.01.2016 - 01:08
fonte

2 risposte

1

Come comprendo la tua domanda, questo è il Pattern del ponte . Vedi link

"Il pattern bridge è un pattern di progettazione utilizzato nell'ingegneria del software che intende" disaccoppiare un'astrazione dalla sua implementazione in modo che i due possano variare in modo indipendente ". [1] Il bridge utilizza l'incapsulamento, l'aggregazione e può utilizzare l'ereditarietà responsabilità separate in classi diverse. "

    
risposta data 30.01.2016 - 07:43
fonte
1

Questo è il Pattern di strategia .

Se stai cercando nomi, ti suggerisco

  • CrawlerStrategy
  • JsoupCrawlerStrategy
  • JauntCrawlerStrategy

In realtà, andrei con ICrawlerStrategy , ma è solo perché sono un .Net dev. :)

    
risposta data 30.01.2016 - 06:09
fonte

Leggi altre domande sui tag