Nel mio tempo libero, ho progettato un CMS per saperne di più sulla progettazione e l'architettura del software, ecc.
Passando attraverso i principi SOLID, ho già notato che idee come "MVC", "DRY" e "KISS", praticamente cadono al loro posto. Detto questo, sto ancora avendo dei problemi nel decidere se una delle due implementazioni è la scelta migliore quando si tratta del Principio di Responsabilità Unica.
Implementazione n. 1:
class User
getName
getPassword
getEmail
// etc...
class UserManager
create
read
update
delete
class Session
start
stop
class Login
main
class Logout
main
class Register
main
L'idea alla base di questa implementazione è che tutte le azioni basate sull'utente sono separate in classi diverse (creando un caso possibile con il nome appropriato Codice Ravioli ), ma seguire l'SRP in un" tee ", quasi letteralmente.
Ma poi ho pensato che fosse un po 'troppo, e ho avuto questa prossima implementazione
class UserView extends View
getLogin //Returns the html for the login screen
getShortLogin //Returns the html for an inline login bar
getLogout //Returns the html for a logout button
getRegister //Returns the html for a register page
// etc... as needed
class UserModel extends DataModel implements IDataModel
// Implements no new methods yet, outside of the interface methods
// Haven't figured out anything special to go here at the moment
// All CRUD operations are handled by DataModel
// through methods implemented by the interface
class UserControl extends Control implements IControl
login
logout
register
startSession
stopSession
class User extends DataObject
getName
getPassword
getEmail
// etc...
Questo è ovviamente ancora molto organizzato e ancora molto "responsabilità unica". La classe User
è un oggetto dati in cui posso manipolare i dati e quindi passare a UserModel
per salvarlo nel database. Tutto il rendering dei dati dell'utente (ciò che l'utente vedrà) è gestito da UserView
e dai suoi metodi, e tutte le azioni dell'utente sono in uno spazio in UserControl
(più alcune cose automatizzate richieste dal CMS per mantenere un utente loggato o per assicurarmi che restino fuori.) Personalmente non riesco a pensare a qualcosa di sbagliato in questa implementazione.
Nei miei sentimenti personali sento che entrambi sono effettivamente corretti, ma non posso decidere quale sia più facile da mantenere e prolungare man mano che la vita va avanti (nonostante mi stia appoggiando verso l'implementazione n. 1).
Quindi tu ragazzi? Quali sono le tue opinioni a riguardo? Qual è il migliore? Quali sono le basi (o meno, le sfumature) di quel principio mi sono perso in entrambi i design?