Funzione che funge da collegamento ai metodi dell'oggetto

3

Stavo leggendo il codice della biblioteca di Python per scoprire come funziona . Poiché questa libreria ha un'interfaccia di utilizzo semplice, crea un oggetto più complesso oltre. Ad esempio:

requests.get(...)

È un collegamento a qualcosa di simile:

s = Session()
r = s.request("get", ...)
return r

Mi piace questo approccio, ma mi piacerebbe sapere se si tratta di un modello di design noto o meno. È importante dire che siamo in grado di utilizzare la classe Session (non è una classe privata / interna).

Possiamo vedere una tecnica simile (un po 'diversa, credo) in Javascript.

Date.now = function () { return new Date().getTime ....

C'è un nome per questo approccio? Dopo aver passato alcuni minuti a cercarlo, non sono riuscito a trovare una spiegazione adeguata. Dovrei considerarlo come un Proxy o un Facciata ?

    
posta Jonathan Prates 13.09.2016 - 00:14
fonte

2 risposte

3

Penso che ci siano molti modi per classificare l'idioma.

Wrapper, ovviamente, ma può comportare l'associazione di molti pattern.

il libro Modelli di implementazione riporta alcuni pattern:

LIBRARY CLASS nel Capitolo 5:

Where do you put functionality that doesn’t fit into any object? One solution is to create static methods on an otherwise-empty class. No one is expected to ever create instances of this class. It is just there as a holder for the functions in the library.

anche METHOD OBJECT nel capitolo 7:

This is one of my favorite patterns, probably because I use it so infrequently but the results are spectacular when I do. Creating method object can help you turn a tangled mass of code packed into an impossible method into readable, clear code that gradually reveals details to readers. This is a pattern I apply after I have some code working, and the more complex the method the better.

Inoltre, penso che sia un semplice pattern Adapter / Facade come già detto @Joel Harmon.

Penso che lo scopo dell'idioma nel tuo caso:

  1. Libreria richieste:
    1. reveals details to readers/users
    2. keep api easy to use
    3. Layers Architecture, High Level Low Level divide, low level can change, high level api won't
  2. Date.now:

    Considero link

Description

Because now() is a static method of Date, you always use it as Date.now().

Polyfill

This method was standardized in ECMA-262 5th edition. Engines which have not been updated to support this method can work around the absence of this method using the following shim:

if (!Date.now) {
  Date.now = function now() {
    return new Date().getTime();
  };
}
  1. "using the following shim" so it is a adapter
  2. "static method of Date", yes LIBRARY CLASS as the book Implementation Patterns said.
    
risposta data 13.09.2016 - 07:06
fonte
1

Questo idioma è semplicemente un wrapper .

La funzione che chiami fornisce un'interfaccia un po 'più pulita per un'altra funzione che altrimenti sembrerebbe più scomoda da usare. L'ho chiamato un idioma, piuttosto che uno schema, perché sono tre righe di codice. A quanto ho capito, questo è ampiamente utilizzato nella programmazione funzionale e in qualsiasi linguaggio che supporti le funzioni come oggetti di prima classe.

Se, tuttavia, stai cercando un termine che si riferisce all'uso di wrapper per creare una nuova interfaccia per le funzionalità esistenti, considererei il modello di adattatore . Se stava lavorando con più di un oggetto di supporto (in questo caso, la funzione session.request), sarebbe il Modello di facciata .

    
risposta data 13.09.2016 - 05:55
fonte

Leggi altre domande sui tag