What would happen if we had an object class with alot of different behaviors. How would that not violate the Single Responsibilty Principle?
Molto probabilmente.
Parliamo di più in termini di dominio stesso. Anche se non sono un esperto al momento dell'ordine di batching e di pick list order:
Un ordine batch è una raccolta di ordini, non necessariamente dallo stesso cliente, ma nella stessa fase di adempimento.
Un lotto di ordini può passare attraverso diverse transizioni. Il lotto dell'ordine può essere inizialmente non ordinato; successivamente viene stabilito un ordine di lista di selezione basato su alcuni criteri di adempimento.
And if it is a violation, how would I split it?
Potresti considerare queste astrazioni separate: (1) il batch di ordinazioni non ordinato, (2) l'elenco di prelievo ordinato basato su (3) criteri di evasione che forniscono un raggruppamento di elementi pubblicitari tra gli ordini.
I criteri di adempimento sono più probabili legati alla strutturazione del magazzino; un diverso magazzino potrebbe fornire un diverso criterio di adempimento, il che avrebbe l'effetto di ordinare diversamente l'elenco di selezione. Pertanto, i criteri di adempimento sono una responsabilità separata.
L'invio di e-mail e la stampa sono probabilmente fuori portata per uno di questi. Ognuno deve semplicemente essere attraversabile / navigabile in modo da poter enumerare gli elementi sottostanti con altri componenti che gestiscono i problemi di posta elettronica e di stampa.
Anche la creazione del lotto ordini è una responsabilità indipendente, poiché possiamo immaginare che la scelta degli ordini effettivamente raggruppati può produrre un'efficienza più o meno ottimale.
Is this a violation of the SRP?
Se dovessimo tentare tutte queste astrazioni in una singola classe sarebbe effettivamente una violazione di SRP.
Tuttavia, SRP non significa separare tutto in piccole astrazioni che poi devono essere cucite insieme dal consumatore o sono scomode e innaturali da usare. Dobbiamo bilanciare SRP con l'astrazione di qualità. L'SRP tende a sostenere la separazione, mentre l'astrazione di qualità tende a sostenere l'aggregazione. A volte, se non riusciamo a trovare un equilibrio tra separazione e raggruppamento, è perché abbiamo più concetti indipendenti che devono essere presi in esame nella loro stessa astrazione.
In questo caso particolare, abbiamo bisogno di concetti separati per un batch di ordini stesso rispetto alle strategie per raggruppare gli ordini insieme e per ordinare gli elenchi di selezione, che sono legati più al loro ambiente. Il lotto dell'ordine può passare attraverso stati e transizioni, che di per sé è una responsabilità sufficiente (e può utilizzare diverse classi) senza anche realizzare le strategie di ordinamento / raggruppamento.