Se capisco la tua domanda, giusto ...
stai cercando il posto "corretto" per mettere il metodo getActiveEntries (). Perché da un punto di vista "di OO-Design" vuoi aderire ai principi di:
- Separazione delle preoccupazioni
- Principio di responsabilità singola
(FYI: non ho mai sentito evitare la statica, quindi l'ho saltata)
La causa del tuo "problema" :
Ogni singola voce dovrebbe preoccuparsi solo di se stessa e solo di se stessa. Pertanto non può essere responsabile di una "raccolta" di voci.
I principi che hai menzionato sopra sono principi orientati agli oggetti. Le soluzioni per problemi che coinvolgono i principi OO richiedono la creazione di molti oggetti e di molte classi in modo che insieme funzionino come soluzione.
Ora se il metodo "getEntries" non può entrare nella classe DAO (Data Access Object) è
... potrebbe entrare in un tipo di fabbrica di classe. Una fabbrica è responsabile della "creazione" di oggetti. Si potrebbe sostenere che una Factory for GuestBookEntries ha 2 metodi: createEntryFromId (int $ entryId) e createActiveEntries ().
... potrebbe andare in un tipo di classe di controller. Come la fabbrica sopra, appena nominata diversamente. Il tipo di classe del controller può fare qualsiasi cosa, anche più di una fabbrica. Se hai bisogno di qualcosa come "verify ()" o "isDirty" per il tuo GuestBookEntry, la fabbrica non sarebbe di nuovo il posto dove mettere quei metodi. Le fabbriche sono preoccupate solo della creazione (hanno il dovere di garantire la creazione o fallire rapidamente) dove il tipo di classe di controller può eseguire metodi verify () o isXYZ () senza danneggiare il loro "scopo".
... alla fine non importa ciò che chiami "it". Ma avrai bisogno di un'altra "classe / oggetto" per assumerti la responsabilità di ripristinare una raccolta di GuestBookEntries attivi. Molto probabilmente questa classe utilizzerà la singola classe GuestBookEntry che hai già.
Quando si arriva a implementare i metodi che interagiscono tra loro (la nuova classe e il GuestBookEntry), si può usare array () come contenitore per trasportare oggetti GuestBookEntry.
È possibile creare un contenitore speciale "digitato" che garantisce di trasportare solo oggetti GuestBookEntry, ma questo dipende ancora da voi. (Inoltre, ancora un'altra decisione in merito alla progettazione, hehe)
Per riassumere:
Crea un'altra classe con la responsabilità di recuperare "raccolte di GuestBookEntries in base al loro stato (attivo / inattivo)" che utilizza (composizione) la tua classe GuestBookEntry esistente.