Nella maggior parte dei progetti web MVC esiste una classe utente. Molte volte un utente ha qualcos'altro in una relazione uno-a-molti, cioè ordini.
Se disponiamo di una classe utente con molti ordini, i metodi che aggiungono, modificano o eliminano gli ordini per un utente devono essere inseriti nella classe utente o in una classe Order separata?
cioè.
1.
user.add_order(order_name) //Instance method
vs
2.
Order.add_order_for_user(user_id, order_name) //Static method
o in alternativa,
3.
order = new Order(user_id,order_name)
order.save()
(Inoltre, nel caso dell'opzione 3, dovrebbe essere combinato con l'opzione 1 e inserire quel metodo)?
Il mio problema principale con l'opzione 1 è che il modello dell'utente tende a diventare enorme in termini di dimensioni. Questo viola l'SRP? Ad esempio, in uno dei miei progetti un utente ha molte "cose" come utenti amici, feed, file caricati, avvisi, punizioni e la lista continua. Fondamentalmente sto aggiungendo i metodi CRUD per tutte quelle "cose" che un particolare utente ne ha molte, nella classe User stessa. È una cosa brutta e dovrei diffondere i metodi CRUD in diverse classi?
Tuttavia, uno dei vantaggi dell'opzione 1 è che posso controllare la logica in quei metodi CRUD utilizzando gli attributi dell'oggetto utente corrente, senza dover interrogare l'utente. Ad esempio, se ho un metodo "add_file" posso verificare se lo spazio file totale dell'utente utilizzato (un attributo dell'utente) è inferiore a un massimo senza aver fatto un'altra query.