Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Interfaces v MVC

Aktivity
Avatar
MicBlack
Člen
Avatar
MicBlack:13.7.2018 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.7.2018 21:37
Avatar
Odpovídá na MicBlack
Martin Konečný (pavelco1998):13.7.2018 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.7.2018 21:55
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
13.7.2018 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.