Come hai identificato, saveUser(User user)
accoppia le due classi. Questo non è sempre male. Se l'unico scopo della classe B è quello di salvare un utente, è giusto che si aspetti che un oggetto utente salvi. Tuttavia, può portare a problemi di estensibilità, se il modello è abbastanza complesso.
Fornisce inoltre al metodo saveUser l'accesso a qualsiasi logica aggiunta alla classe dell'utente. Un rischio basso, ma comunque un rischio.
D'altra parte, saveUser(String username, String password)
porta i suoi problemi. è molto facile, soprattutto quando hai 10 o più parametri, per farli confondere. Se qualcuno digita accidentalmente saveUser(user.Password, user.Username)
, non otterrai un errore in fase di compilazione, o persino un errore di runtime, salverà felicemente quelle stringhe nei campi sbagliati.
Inoltre, un lungo elenco di parametri può rendere il tuo codice illeggibile.
Un'opzione migliore è probabilmente quella di utilizzare un'interfaccia saveUser(IUserDetails user)
che non accoppia le classi l'una all'altra, ma piuttosto accoppia il metodo saveUser a qualsiasi classe che contenga i dati necessari per eseguire l'attività che è stata assegnata a fai - salva un nome utente e una password.