Come implementare l'accoppiamento libero?

4

Voglio implementare l'accoppiamento libero in un progetto.

Conosco due esempi di progetti di accoppiamento loose di successo:

  1. Su una workstation Unix, gli script di shell realizzano un accoppiamento lento tra le utilità di base. L'accoppiamento lento si basa sulla capacità della shell di ciecamente di reindirizzare i flussi di dati tra le utility, senza avere alcuna conoscenza sulla struttura. Le utility concordano su un modulo comune per cooperare come un formato separato da pipe per ordinare, tagliare, incollare, awk, ecc., Un dump svn o un dump banale di un normalizzato Documento SGML (con onsglmls).

  2. Su un sistema Mac OS X, gli Applescript possono essere considerati come un accoppiamento lento.

In questi due esempi, vedo che i componenti cooperanti concordano su un protocollo comune per serializzare e deserializzare i dati che devono essere scambiati. Pertanto i componenti dipendono dal protocollo di serializzazione piuttosto che dalla rappresentazione interna dei dati.

L'implementazione di un protocollo di comunicazione stabile tra i componenti dell'applicazione è una strategia vincente per implementare un accoppiamento lento (e una buona incapsulamento)?

Per risolvere i legami, chiedo anche quale sarebbe un buon nome per gli artefatti del protocollo: i "dati" sono un po 'vaghi e ce ne sono molti in vari punti del software!

    
posta user40989 21.11.2013 - 12:48
fonte

2 risposte

9

Prima di tutto, non è corretto dire "implementare l'accoppiamento libero". L'accoppiamento libero è un principio di progettazione e un principio può essere applicato ma non implementato. Detto questo, puoi applicare quel principio a qualsiasi progetto che ti piace.

Riguardo agli esempi, IMO sono esempi di design per contratto . I componenti concordano su un'interfaccia o un protocollo attraverso il quale possono interagire. Mentre i componenti possono cambiare la loro struttura interna o logica, l'interfaccia di interazione rimane la stessa.

È giusto dire che la progettazione per contratto è un esempio di applicazione di un accoppiamento lento. Ma l'implicazione dell'accoppiamento libero non è limitata alla progettazione solo per contratto. Può essere applicato a qualsiasi progetto per mantenere i pezzi il più indipendenti possibile.

Penso che potresti essere interessato a misurare l'accoppiamento e la coesione e Demeter's legge e relazione con l'accoppiamento .

    
risposta data 21.11.2013 - 14:15
fonte
2

Parametrizzando.

Ad esempio, qui f è hard-linked a molti altri moduli:

def f():
    return module1.g(module2.x, module3.y)

Ecco un esempio meno abbinato, ma simile:

def f(x, y):
    return module1.g(x, y)

E un esempio ancora meno accoppiato:

def f(g, x, y):
    return g(x, y)

L'accoppiamento può anche avvenire tramite tipi:

String id(String input) {
    return input;
}

Quindi perché non parametrizzare anche quelli?

<T> T id(T t) {
    return t;
}

Il concetto di interfacce comuni va di pari passo con la parametrizzazione - non puoi parametrizzare qualcosa senza un'idea della sua interfaccia.

    
risposta data 21.11.2013 - 21:36
fonte

Leggi altre domande sui tag