I know there are plenty of articles and questions about MVC and best practices, but I can't find a simple example like this:
Lets say I have to develop a web application in PHP, I want to do it following the MVC pattern (without framework). The aplication should have a simple CRUD of books.
From the controller I want to get all the books in my store (that are persisted in a database).
How the model should be?
Something like this:
class Book { private $title; private $author; public function __construct($title, $author) { $this->title = $title; $this->author = $author; } public function getTitle() { return $this->title; } public function setTitle($title) { $this->title = $title; return this; } . . . class BooksService{ public getBooks(){ //get data from database and return it //by the way, what I return here, should by an array of Books objects? } public getOneBook($title){ //get data from database and store it into $the_title, $the_autor $the_book = new Book($the_title, $the_autor); return $the_book; } . . . So I call it(from the controller) like that:
$book_service = new BooksService(); $all_books = $book_service->getBooks(); $one_book = $book_service->getOneBook('title'); Or maybe should be better have everything in the Books class, something like this:
class Book { private $title; private $author; //I set default arguments in order to create an 'empty book'... public function __construct($title = null, $author = null) { $this->title = $title; $this->author = $author; } public function getTitle() { return $this->title; } public function setTitle($title) { $this->title = $title; return this; } public getBooks(){ //get data from database and return it //and hare, what I should return? an Array? } public getOneBook($title){ //get data from database and store it into $the_title, $the_autor $the_book = new Book($the_title, $the_autor); return $the_book; } . . . So I call it(from the controller) like that:
$book_obj = new Book(); $all_books = $book_obj->getBooks(); $one_book = $book_obj->getOneBook('title'); Or maybe I'm totally wrong and should by in a very different way?
Thank you!