Ci sono (almeno) tre direzioni in cui possiamo affrontare la domanda per trovare ragioni che suggeriscono che una singola classe con più metodi è più appropriata.
Innanzitutto, una delle ragioni è che ciascuna delle singole operazioni C, R, U, D deve accedere alla stessa memoria sottostante. Se cambi il meccanismo / oggetto di archiviazione sottostante, ciò significa probabilmente cambiare tutte e 4 le classi C / R / U / D (e se ciò non significa che l'oggetto di archiviazione comune sottostante stia già fornendo un'astrazione CRUD per nascondere i suoi dettagli! ). Il requisito di archiviazione sottostante comune suggerisce una singola classe con metodi su più classi che condividono un oggetto di memorizzazione comune (una classe contro 5 classi).
In secondo luogo, un'altra ragione è che dovremmo pensare a come possiamo aggirare e / o condividere le capacità CRUD con altri codici che vogliono usarlo. Come classi separate, dovremmo passare separatamente gli oggetti C, R, U e D a vari altri utenti delle capacità. Come singola classe, passiamo semplicemente attorno all'unica entità.
La buona programmazione consiste nel fornire astrazioni che possono essere costruite da te e forse da qualcun altro. Vuoi allontanarti dalle operazioni di basso livello e fornire utili e rilevanti astrazioni. Queste astrazioni sono necessariamente gruppi di funzionalità che sono correlate l'una con l'altra, raggruppate insieme . A volte questo significa una singola classe, altre volte una gerarchia di classi e altre volte un insieme di interfacce. Una terza ragione è che siccome non stai fornendo una gerarchia di classe reale (ma piuttosto una serie piatta di classi), scegli una singola classe come pacchetto per la tua astrazione.
Quando facciamo questo, separiamo i fornitori dai consumatori, che forniscono una misura di indipendenza. Ciò consente la stratificazione in cui uno strato semplice non deve preoccuparsi di tutti gli strati sottostanti perché ha gli strumenti giusti dal livello immediatamente inferiore per implementare un'astrazione utile per il livello successivo.