Trasferimento dati tra moduli liberamente accoppiati di un'applicazione

2

Diciamo che abbiamo un progetto piuttosto grande scritto in Python usando il framework Django che è composto da più moduli (termine appropriato in Django è un progetto costituito da più app, ma per ragioni di generalità useremo il termine "moduli"). Questo per ottenere un accoppiamento basso per una facile manutenibilità (tra gli altri vantaggi).

Sono interessato a come, durante il runtime del progetto, come i dati verrebbero spostati tra questi moduli. Come oggetti? O come stringhe?

Se i dati vengono trasferiti tra i moduli nel formato di un oggetto (come nel caso del modulo stesso), non è possibile ottenere un accoppiamento basso. Il motivo è perché un modulo dipenderà dalla classe dell'oggetto localizzata nell'altro modulo. Ad esempio, il modulo non può essere facilmente riutilizzato in un progetto completamente diverso a causa della dipendenza da un altro modulo.

Ma se i dati sono nel formato delle stringhe, è possibile ottenere un accoppiamento basso. La separazione delle funzioni sarà chiara, la risoluzione dei problemi sarà limitata a un singolo modulo e i moduli possono essere facilmente riutilizzati in progetti completamente diversi. Questo è fondamentalmente il modo in cui un'API invia i dati a un client.

Ma questo è il modo giusto per ottenere un accoppiamento basso - utilizzando stringhe per il trasferimento dei dati tra i moduli di un progetto (leggi: applicazione)?

    
posta heapoverflow 16.03.2017 - 19:43
fonte

1 risposta

1

Questa domanda sembra fuorviata.

Si dice che si desidera "trasferire dati tra moduli liberamente accoppiati", ma in quasi tutti i casi del mondo reale ragionevole, si trasferiscono i dati "per un motivo". I dati (oggetti) devono essere compresi dal mittente e devono essere compresi dal modulo destinatario. Ciò implica intrinsecamente l'accoppiamento dei moduli.

(ci sono forse casi di giocattoli che puoi trovare dove potrebbe avere senso trasferire i dati su un modulo senza capire il formato dei dati, ma questi casi sarebbero rari e per lo più artificiali / falsi).

Tipicamente, il modo più naturale per farlo nella maggior parte dei linguaggi di programmazione sarebbe avere il modulo che definisce l'interfaccia (destinatario delle chiamate) anche definire qualsiasi oggetto (o importare / riferire detti oggetti) che sono necessari come input o uscite per l'interfaccia di quel modulo.

Sì, questo significa che il chiamante dovrebbe importare (python) il modulo nella sua chiamata (ma doveva farlo comunque), e sì, questa è una forma di accoppiamento. Ma è unidirezionale, ed è davvero intrinseco a ciò che stai cercando di realizzare. Non c'è un modo utile per aggirarlo.

Certo - potresti esternalizzare gli oggetti come JSON o XML e passare "stringhe" o "byte grezzi". Ma dovresti formattare i dati serializzati proprio nello scrittore (chiamante) e nel lettore (chiamato API). Ciò equivale allo stesso accoppiamento, ma non alle funzioni linguistiche (classi).

    
risposta data 18.07.2018 - 02:49
fonte

Leggi altre domande sui tag