Opa Luan, vou tentar explicar primeiro com o exemplo desse projeto e depois faço um paralelo com seu exemplo
Em nosso caso temos a aplicação que é uma livraria, então temos a seguinte separação:
Controladores : São chamados dado uma requisição e controlam o fluxo do que será feito
DAO: São as classes responsáveis por fazer a comunicação entre a nossa aplicação e o banco de dados
Modelos: Contém a estrutura básica daquele objeto que queremos criar e responsável pela validação
Rotas: Definem o ponto da requisição e que método do controlador será utilizado
Então, nesse sentido cabe a gente pensar um pouco, no que se encaixa a classe Livraria
?
Se ela for responsável por enviar para o banco de dados, ela é desnecessária pois já temos o livro-dao
que tem a exclusiva missão de fazer isso
Ela é um modelo? Não faz muito sentido criar uma livraria, pois queremos receber os dados do usuário e já salvar no banco de dados, ou, pegar os dados do banco e já renderizar na página
Então dessa maneira a gente acabou fazendo uma conexão natural de que livros pertencem a uma livraria, mas quando trazemos para o mundo do código essa relação perde um pouco de sentido, então a classe acaba sendo desnecessária
Agora um exemplo de uma classe que poderia receber livros e depois enviar para o banco de dados
Um classe carrinho, então quando entramos no site e selecionamos elementos podemos ir salvando em um objeto carrinho que recebe o livro e a quantidade, e quando finalizamos a compra ele faz a requisição para o banco de dados :)
Mas dificilmente queremos fazer isso que você disse de guardar coisas, a ideia é sempre mandar ou receber de nosso banco!
Da maneira que você fez a analogia acabou perdendo um pouco de sentido, pois parece que podemos criar uma classe Shopping
para armazenar a livraria, que armazena os livros
Quando na verdade o processo de fazer transações com objeto do tipo livro, ja tornam a nossa aplicação como um todo uma livraria :)
Ficou mais claro ?
Abraços e Bons Estudos!