Dovrei considerare anche l'accoppiamento lento per i metodi di classe? [duplicare]

3

Sono un fan di Dependency Injection , tuttavia non so quanto entrambi i metodi public e private all'interno di una classe dovrebbero essere liberamente accoppiati.

Solo per immaginarlo meglio, quando ho projectId e userId come proprietà private nella mia classe, ed entrambi hanno il proprio setter metodi che eseguiranno anche la convalida dell'input - generando un errore in caso di input imprevisti, quindi non è meglio che tutti i metodi della classe si basino su queste proprietà invece di ottenerle tramite gli argomenti del metodo 'e ripetere l'intero convalida, ecc. ancora?

In questo caso i metodi saranno strettamente legati alla classe stessa e probabilmente anche al costruttore , ma il vantaggio è che tutti i metodi possono facilmente contare su setter metodi e supporteranno sempre anche che i dati corretti siano sempre disponibili per l'elaborazione - perché altrimenti il setter avrebbe dovuto generare un'eccezione.

Questo mi sembra molto utile e posso rendere tutte le classi e le librerie liberamente accoppiate in un modo in cui non dipendono l'una dall'altra, tuttavia la mia domanda è, può un metodo all'interno di una classe essere dipendente dalle proprietà della classe se stesso o no? È considerato come una cattiva pratica?

    
posta Mahdi 28.02.2014 - 12:49
fonte

3 risposte

6

Se i metodi di una classe non possono dipendere dalle variabili di quella classe, allora chi può? Se tutti i tuoi metodi fossero completamente disaccoppiati da tutti gli altri metodi e variabili, tutte le classi coinvolte sarebbero prive di stato e tutti i metodi potrebbero anche essere statici.

Ovviamente ci sono sempre dei compromessi quando si parla di design, ma penso che derivi semplicemente dall'idea di coesione - se le tue proprietà private aumentano la coesione all'interno della classe (e se sono effettivamente sempre valide e pronte per essere consumate in ogni momento), allora sì, con tutti i mezzi usali, altrimenti sbarazzati di loro.

(Che tu voglia o meno usare setter è un'altra domanda interamente ...)

    
risposta data 28.02.2014 - 14:27
fonte
2

can a method inside a class be dependent on the class properties itself or not? Is it considered as a bad-practice?

No, non è una cattiva pratica. Va bene all'interno di una classe dipendere da metodi e campi privati comuni. Questo è solo un buon incapsulamento . La classe è una struttura che consente l'occultamento delle informazioni dal resto dei componenti dell'applicazione (altre classi).

Loose Coupling di solito si riferisce alla protezione delle classi da ogni altro stato interno.

Aggiungerò anche che, se questo ti riguarda, allora molto probabilmente, la classe sta facendo troppo. Seguendo le classi di Principio di Responsabilità Unica (SRP) si otterrà naturalmente un'elevata coesione e non avrà l'odore di una grande dipendenza in una singola classe.

Spero che questo aiuti.

    
risposta data 28.02.2014 - 16:07
fonte
0

Progettazione di classi virtuali Molte delle classi che ho sviluppato hanno finito per essere non-finali. Con ciò intendo che ho incluso tutte le funzionalità della classe che avevo originariamente inteso, ma le circostanze mi hanno permesso di estendere la classe.

1) Valutazione pigra. Se si utilizza il metodo getter per un aggregato, i valori possono essere importati o calcolati nel momento in cui sono necessari e non prima. Questo è spesso importante per le query costose, come le operazioni del database.

2) Testabilità. Una classe che ho progettato prevedeva alcune operazioni costose. Dato che stavo testando i percorsi di controllo in un gruppo di test, sono stato in grado di sottoclasse la classe sotto test e ho modificato alcuni parametri (1 pass invece di 400 passaggi) per rendere i test meno onerosi.

    
risposta data 28.02.2014 - 15:57
fonte

Leggi altre domande sui tag