Parametri vs Funzioni specializzate

0

Cercando di capire quale struttura è più pulita tra l'utilizzo di una funzione specializzata o l'utilizzo di parametri per realizzare la stessa cosa (vedi esempio di codice sotto).

Essenzialmente, posso ridurre il numero di metodi astratti nella mia interfaccia aggiungendo parametri (come nel caso BufferParameter ). Se i metodi stessi diventassero troppo grandi (in termini di parametri e / o linee di codice), allora passerei alle funzioni esplicite (come in BufferMethod caso).

Qui suona la mia logica o dovrei preferire sempre il caso BufferMethod ?

class BufferBase(object):
    __metaclass__ = ABCMeta

    @abstractmethod
    def clear(self):
        pass

    def clearall(self):
        """Only used in the 'BufferMethod' class."""
        pass

class BufferParameter(BufferBase):
def clear(self, buffer_idx='all'):
    """Accepts either a buffer integer index or the string 'all'."""
    if buffer_idx == "all":
        for buff in self.buffers:
            buff.clear()
        return

    self.buffers[buffer_idx].clear()

class BufferMethod(BufferBase):
    def clear(self, buffer_idx):
        self.buffers[buffer_idx].clear()

    def clearall(self):
        for buff in self.buffers:
            buff.clear()

Esempi di utilizzo:

bp = BufferParameter()
bm = BufferMethod()

for b in bp.buffers:
    b.write('foo')

for b in bm.buffers:
    b.write('foo')

bm.append('bar', buffer_idx=6)
bp.append('bar', buffer_idx=6)

print(bm.read(buffer_idx=6))
print(bp.read(buffer_idx=6))

print(bm.read(buffer_idx='all'))
print(bp.readall())

bm.clear('all')
bp.clearall()
    
posta Nick Sweet 01.11.2018 - 18:22
fonte

1 risposta

0

Dovresti preferire l'approccio BufferMethod rispetto all'approccio BufferParameter.

I metodi dovrebbero idealmente fare solo una cosa. Qui, state implementando due comportamenti molto diversi: cancellare uno specifico buffer per indice e cancellare tutti buffer. È più chiaro e più pulito avere metodi separati per loro.

    
risposta data 02.11.2018 - 00:42
fonte

Leggi altre domande sui tag