MVC模型:在处理数据库的代码中放置变量的位置


MVC Model: Where to place variable in my code that deals with database

我正在努力在代码中找到放置数据库读取代码的正确位置,以及将数据库中读取的数据传递给接收对象的正确方法。下面是我的代码。注意$metaData变量。这就是所讨论的变量(它从DB接收数据,然后传递给接收对象)。

class Controller
{
    // generages PDF with data placed in specific areas of PDF
    public function generateOutline($outputData)
    {
        // PDF library engine
        $pdfEngine = new PdfEngine();
        // Doctrine ORM Database Connector
        $em = DoctrineConnector::getEntityManager();
        // object containing metadata describing where to place data for $outputData
        $metaData = $em->getRepository(Metadata::class)->findAll();
        //method that places $outputData as described by $metaData
        $pdfEngine->generateOutline($metaData, $outputData);
    }
}
// part of View, because PDF is displayed to us
class PdfEngine
{
    public function generateOutline(Metadata $metaData, array $data)
    {
        $this->placeTextOnPdf($metaData, $data);
    }
}

问题

我很难弄清楚在哪里放置$metaData构造。你看。。$metaData是从数据库(在我的代码中)中读取的一个变量

我可以将数据库置于视图中吗?不是。视图本身不应涉及数据库的详细信息。

我可以将数据库放入控制器吗?不是真的应该是"瘦控制器,胖模型"

我可以把它放在模型里吗?模型在哪里?它是什么?我该把代码放在哪里?

我最终做了这样的事情。。

class Controller
{
    public function generateOutline($input)
    {
        $data = $this->inputFilter->getOutlineRequestData($input);
        //leaving around some existing processing code
        //may have to find a better place for it later
        $processor = (new OutlineProcessorFactory())->getProcessor($input['line']);
        $output = $processor->processInput($data);
        //encapsulated my code in a "service" layer
        $this->pdfService->renderPdf($output);
    }
}
class PdfService()
{
     function renderPdf($output);
     {    
        $pdfEngine = new PdfEngine();
        $em = DoctrineConnector::getEntityManager();
        $metaData = $em->getRepository(Metadata::class)->findAll();
        $pdfEngine->generateOutline($metaData, $outputData);
     }
}