सिम्फनी तरीके के अनुसार सबसे अच्छा अभ्यास क्या है?

विकल्प १ :

class MyController extends Controller
{
    public function myAction(...)
    {
        // ..
        $example = $this->getDoctrine()->getRepository('AppBundle:Contract')->getContracts(array(
            'company_id'                => $company->getId(),
            'contract_month_date_start'  => date('Y-m-d', strtotime('first day of this month', $contractDate->getTimestamp())),
            'contract_month_date_end'    => date('Y-m-d', strtotime('last day of this month', $contractDate->getTimestamp())),
        ));
        // ..
    }
}

class ExampleRepository extends EntityRepository
{
    public function getContracts($options)
    {

        //..

        $qb->select('contract')
            ->from('AppBundle:Contract', 'contract')
            ->where('contract.companyId = :company_id')
            ->andWhere('contract.startDate < :contract_month_date_end')
            ->andWhere('contract.endDate < :contract_month_date_end')
            ->setParameter('company_id', $options['company_id'])
            ->setParameter('contract_month_date_start', $options['contract_month_date_start'])
            ->setParameter('contract_month_date_end', $options['contract_month_date_end']);

        //..
    }
}

विकल्प २ :

class MyController extends Controller
{
    public function myAction(...)
    {
        // ..
        $example = $this->getDoctrine()->getRepository('AppBundle:Contract')->getContracts(array(
            'company'      => $company,
            'contractDate' => $contractDate
        ));
        // ..
    }
}


class ExampleRepository extends EntityRepository
{
    public function getContracts($options)
    {

        //..

        $company_id                = $options['company']->getId();
        $contract_month_date_start = date('Y-m-d', strtotime('first day of this month', $options['contractDate']));
        $contract_month_date_end   = date('Y-m-d', strtotime('last day of this month', $options['contractDate']));

        $qb->select('contract')
            ->from('AppBundle:Contract', 'contract')
            ->where('contract.companyId = :company_id')
            ->andWhere('contract.startDate < :contract_month_date_end')
            ->andWhere('contract.endDate < :contract_month_date_end')
            ->setParameter('company_id', $company_id)
            ->setParameter('contract_month_date_start', $contract_month_date_start)
            ->setParameter('contract_month_date_end', $contract_month_date_end);

        //..
    }
}

मुझे लगता है कि दूसरा बेहतर है (भंडार का उपयोग कर विभिन्न नियंत्रकों के बीच कम डुप्लिकेट कोड)। लेकिन मुझे यह भी लगता है कि यह रिपोजिटरी को बहुत अधिक जिम्मेदारी देता है।

3
lepix 26 जून 2017, 18:55

1 उत्तर

मैं प्रेजेंटेशन लेयर में इस तरह का काम करना पसंद करता हूं, अगर आप TWIG का उपयोग कर रहे हैं तो आपको date फ़ॉर्मैट फ़िल्टर या अगर यह एक एपीआई है तो आप JMS क्रमांकन उदाहरण के तौर पर।

इस तरह व्यावसायिक तर्क नहीं बदलता है और प्रस्तुति तर्क के परिवर्तन के बारे में प्रभावित नहीं होता है

मेरे दो सेंट।

0
Matteo 26 जून 2017, 19:00