Ecco qualcosa che continuo a cercare di capire quale sia la soluzione migliore. Ho avuto questo problema mentre lavoravo con PHP e Java, quindi è una comprensione fondamentale del problema OOP. Gli esempi sono in PHP.
Diciamo che ho alcuni oggetti qui. Song, Artist, ArtistProfile, User.
Quindi in alcuni casi voglio che ArtistProfile e una serie di oggetti User (subscribers) chiamino l'Artista (ad esempio la pagina del profilo dell'artista), in altri casi voglio solo le informazioni sull'Artista, come quando si visualizza una pagina del canzone.
Dovrei nidificare un oggetto come parte di un altro o dovrei creare oggetti più specifici per usi diversi.
Opzione 1: nidificata
Class Song {
private $songId;
private $songName;
private $year;
private $Artist; //Artist object
}
Class Artist {
private $artistId;
private $name;
private $age;
private $subscriberArr; //Array of User objects which then have more nested objects such as a Role object, Profile object
private $profile; //Profile object which could also have more nested objects
}
Class User {
private $userId;
private $name;
private $age;
private $role; //Role object
private $profile; //UserProfile object
}
Opzione 2: crea più oggetti
Class Song {
private $songId;
private $songName;
private $year;
private $artistId;
}
Class Artist {
private $artistId;
private $age;
private $name;
}
Class User {
private $userId;
private $name;
private $age;
private $roleId;
}
Class SongWithArtist {
private $song; //Basic Song object
private $artist; //Basic Artist object
}
Class ArtistWithProfile {
private $artist; //Basic artist object
private $profile; //Profile object
private $subscriberArr; //UserDisplay object containing basic User object
}
Class UserWithProfile {}
L'opzione 1 significa sprecare un sacco di tempo / risorse per raccogliere informazioni che potrebbero non essere necessarie per quella pagina ma più facili da gestire. L'opzione 2 è caotica e richiede di tenere traccia di quale oggetto è ciò che è più veloce e meno chiamate db. Qual'è l'opzione "corretta" e / o esiste una terza opzione corretta?