Have you ever experienced the situation when you start talking to your Product Owner, Business Analyst or Project Manager about your issues with the Database? Can you remember their faces when explaining how to persist and fetch an object? They had no idea what you were talking about.
The truth is that they don't care, but that's ok. If you decide to store the ideas in a MySQL server, Redis or SQLite it is your problem, not theirs. Remember, from a business standpoint, your infrastructure is a detail. Business rules are not going to change whether you use Symfony or Zend Framework, MySQL or PostgreSQL, REST or SOAP, and so on.
That's why it is important to decouple our IdeaRepository
from its implementation. The easiest way is to use a proper interface. How can we achieve that? Let's take a look at Listing 3.
class IdeaController extends Zend_Controller_Action { public function rateAction() { $ideaId = $this->request->getParam('id')...