Diskuze: Interfaces v MVC

PHP PHP Interfaces v MVC American English version English version

Aktivity (1)
Avatar
MicBlack
Člen
Avatar
MicBlack:13. července 21:37

Ahoj,

chtěl bych se zeptat - používate interface v MVC architektuře (viz zdejší manuál)? Jakým způsobem je správné to implementovat? Osobně bych si vytvořil nový adresář "interface" kam bych jednotlivé interface ukládal.

Momentálně to mám v kódu tak, že např: modely jsou specifické pro nějakou oblast (dotahování článků, databáze, a tak) a tedy metody, které jsou v nich implementované nejsou nijak přenositelné, přepoužitelné. Má cenu dělat pro model dotahování článků interface, který bude implementovat pouze model dotahování článků?

Díky za případnou radu, nasměrování.

 
Odpovědět 13. července 21:37
Avatar
Odpovídá na MicBlack
Martin Konečný (pavelco1998):13. července 21:52

Ahoj,
interface použiju v případě, že chci, abych měl jistotu, že objekt, se kterým budu komunikovat, umí něco konkrétního dělat. Například kdybych dělal skript, který bude ukládat někam data, tak si udělám interface např. IDataSavable, a to mi může implementovat třída, která ukládá data do databáze, třída, která ukládá data do souboru atd. Mě pak nezajímá, kam se ta data ukládají, ale vím, že to ta třída umí uložit :D

Pokud bys chtěl dělat interface pro jedno konkrétní využití (ukládání článků do databáze), pak nevidím v interface smysl. Smysl bych viděl třeba v interface, které by říkalo, že daný objekt umí odněkud články tahat. Např. by definoval

interface IArticleDownloader
{

        public function getArticles(DateTime $dateFrom, DateTime $dateTo);

}

a pak by toto mohly implementovat například tyto třídy:

// tahání článků z databáze
class DbArticleDownloader implements IArticleDownloader
{

        private $db;

        public function getArticles(DateTime $dateFrom, DateTime $dateTo)
        {
                return $this->db->fetchAll("
                        SELECT * FROM `article`
                        WHERE `date_published` > ? AND `date_published` < ?
                ", $dateFrom, $dateTo);
        }

}

// tahání článků z API cizího serveru
class ApiArticleDownloader implements IArticleDownloader
{

        private $url = "www.stranka-se-clanky.cz/api/articles";
        private $httpClient;

        public function getArticles(DateTime $dateFrom, DateTime $dateTo)
        {
                // uvažme, že by se posílal požadavek na server a druhým parametrem se předaly GET / POST data
                return $this->httpClient->sendRequest($this->url, array(
                        "dateFrom" => $dateFrom,
                        "dateTo" => $dateTo
                ));
        }

}

Pokud ale máš jeden konkrétní úkol - "tahat články z databáze", tak v tom osobně nevidím moc smysl.

Editováno 13. července 21:55
Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
Nahoru Odpovědět 13. července 21:52
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 2 zpráv z 2.