Back to Question Center
0

Käytännön OOP: Tietovisa-sovelluksen rakentaminen - MVC            Käytännön OOP: Quiz-sovelluksen rakentaminen - MVCRelated Aiheet: SecurityAPIsDevelopment EnvironmentPatterns & KäytännötDebugging & Semalt

1 answers:
Käytännön OOP: Tietovisa-sovelluksen rakentaminen - MVC

SOLID MVC Quiz -sovelluksen rakentaminen ohut

  • Käytännön OOP: Tietovisa-sovelluksen rakentaminen - Bootstrapping
  • Käytännön OOP: Quiz-sovelluksen rakentaminen - MVC

Osa tästä sarjasta aloitti alhaalta ylöspäin suunnitellun lähestymistavan avulla luomalla Quiz ja kysymys kokonaisuutemme kirjoittamalla tyhjän Data Mapper -luokan Quiz -yksiköt ja piirrä käyttöliittymän pääpalvelumme \ QuizApp \ Service \ Quiz , joka määrittää tietovirran ratkaisemiseen tarvittavan virran. Jos et ole vielä lukenut ensimmäistä osaa, suosittelen, että käytät nopeasti läpi sen ennen kuin jatkat osaa 2 ja / tai lataat koodin täältä.

Tällä kertaa luodaan ja kopioimme \ QuizApp \ Service \ Quiz -palvelu, joka on meidän tietovälin sovelluksen selkäranka - google empresas. Sitten kirjoitamme ohjaimet ja näkymämme Slim MVC -kehyksen avulla ja lopuksi luodaan MongoDB-kartoitinkuva, jotta voisimme korvata viimeisen kerran julkaisemamme nukkekartoittimen paikan.

Palvelun koodaus:

Okei, nyt, kun olemme määritelleet rajapinnan mapperille ja luoneet yksikköluokat, meillä on kaikki tarvittavat rakennuspalikat konkreettisen palveluluokan toteuttamiseksi.

         showAllQuizes       menetelmä käärii    QuizMapper :: findAll       -menetelmän. Voisimme tehdä    $ mapper    julkiseksi, mutta se rikkoisi kapseloinnin, vuotaa matalan tason toimintoja korkean tason luokkiin.  

startQuiz -menetelmä aloittaa tietokilpailun, joka välitetään argumenttina tallentamalla tietokilpailu istuntoon myöhempää käyttöä varten. Se hyväksyy joko tietokilpailuyksikön objektin tai tietokilpailun tunnuksen. Jälkimmäisessä tapauksessa se yrittää löytää tietokilpailun käyttäen $ mapperia . Menetelmä käyttää $ _SESSION superglobalia suoraan, mikä ei ole paras käytäntö - palvelu rikkoisi, jos sitä käytetään esimerkiksi komentorivikossa - mutta palvelua ei ole vielä liian monimutkaista. Jos halusimme tehdä palvelun ajettavaksi komentorivillä, otamme toiminnot, joita käytimme tietojen tallentamiseen istuntoon käyttöliittymään. Web-ohjain siirtäisi sovelluksen, joka käytti sisäisesti $ _SESSION superglobalia, kun taas komentorivivalitsin saattaa tallentaa "istunnon" muuttujat luokkien ominaisuuksiksi.

getQuestion -menetelmä yrittää saada tietokannasta seuraavaan kysymykseen nykyisen tietokilpailun, siirtää muille hyödyllisille menetelmille ja heittää poikkeuksen, jos tietokilpailu on ohi tai käyttäjä ei ole tietokilpailun keskellä. checkSolution -menetelmä palauttaa, onko käyttäjän ratkaisu oikea ja päivittää istunnon vastaamaan tilan tilaa vastauksen jälkeen.

isOver -menetelmä palaa true, jos nykyinen tietokilpailu on ohi tai jos tietokilpailu ei ole käynnissä.

getResult -menetelmä palauttaa \ QuizApp \ Service \ Quiz \ Result objektin, joka kertoo käyttäjälle, onko hän läpäissyt tietokilpailun ja kuinka monta kysymystä hän vastasi oikein.

Ohjaimet ja näkymät ohut:

Nyt, kun olemme valmiit MVC-sovelluksen "M", on aika kirjoittaa ohjaimet ja näkymät. Käytämme Slim-kehystä, mutta Slim on helppo korvata mihinkään muuhun MVC-kehykseen, koska koodimme on irrotettu. Luo -indeksi. php -tiedosto, jonka sisältö on seuraava:

      ;$ service = uusi \ QuizApp \ Service \ Quiz (uusi \ QuizApp \ Mapper \ HardCoded   );$ app = uusi \ Slim \ Slim   ;$ app-> config (['templates .path' => '. / views']);// Ohjaimen toiminnot täällä$ Sovellus-> Suorita   ;     

Tämä on meidän Slim-sovelluksen perusta. Luomme palvelumme ja aloitamme PHP-istunnon, koska käytämme $ _SESSION superglobalia palveluksessamme. Lopuksi perustimme Slim-sovelluksemme. Lisätietoja Slimista on laaja dokumentti Slim-projektin verkkosivuilla.

Luo etusivulle ensin. Kotisivulla on luettelo tietokilpailuista, joita käyttäjä voi ottaa. Ohjauskoodi tähän on yksinkertainen. Lisää seuraava kommenttimme indeksiin. php -tiedosto.

     $ app-> get ('/', function    käyttää ($ palvelu, $ app) {$ app-> render ('choose-quiz. phtml', ['quizes' => $ palvelu-> showAllQuizes   ]);});     

Määritämme etusivun reitin $ app-> get menetelmällä. Kuljetamme reitin ensimmäisenä parametrina ja lähdemme koodin toimimaan toisena parametrina, nimettömänä funktiona. Toiminnossa teemme valita-tietokilpailun. phtml -näkymätiedosto, siirtäen sille luettelon tietokilpailuistamme, jonka haettiin palvelusta. Koodataan näkymä.

      

valitse tietovisa

Jos siirryt sovelluksen kotisivulle selaimellasi, näet kaksi quiz-koodia, jotka on koodattu aiemmin: "Quiz 1" ja "Quiz 2". Tämän reitin pitäisi aloittaa tietokilpailu, jonka käyttäjä valitsi ja ohjaa hänet ensimmäiseen kysymykseensä. Lisää seuraava reitti indeksiin. php :

($), $ App ($), $ app, $ {app {> get ('/ choose-quiz /: id'$ Palvelu-> startQuiz ($ id);$ Sovellus-> ohjata ( '/ ratkaise-kysymys');});

Määritetään nyt / solve-question reitti. Tämä reitti näyttää käyttäjälle senhetkisen kysymyksen, jonka hän ratkaisee.

$ app-> get ('/ solve-question', function käyttää ($ service, $ app) {$ app-> render ('solve-question. phtml', ['kysymys' => $ palvelu-> getQuestion ,]);});

Reitti esittää näkymän ratkaisemaan kysymyksen. phtml palauttamalla palvelusta. Määritetään näkymä.

      

getQuestion ; ?>
    getSolutions kuin $ id => $ ratkaisu):?>

Näytämme käyttäjälle lomakkeen, jossa on valintanappi / vastaus. Lomake lähettää tulokset reitin tarkistus-vastaus .

     $ app-> post ('/ check-answer', function    käyttää ($ service, $ app) {$ isCorrect = $ service-> checkSolution ($ app-> request-> post ('id'));jos (! $ service-> isOver   ) {$ Sovellus-> ohjata ( '/ ratkaise-kysymys');} else {$ Sovellus-> ohjata ( '/ pää');}});     

Tällä kertaa määritämme reitin "POST" -pyynnöille, joten käytämme $ app-> post -menetelmää. Käyttäjän lähettämän ratkaisutunnuksen saamiseksi kutsumme $ app-> request-> post ('id') . Palvelu ilmoittaa, vastaako tämä vastaus. Jos kysymyksiisi on enemmän vastauksia, ohjataan hänet takaisin "ratkaise-kysymys" -reittiin. Jos hän on suorittanut tietokilpailun, lähetämme hänet "loppu" reittiin. Tämän pitäisi kertoa käyttäjälle, onko hän läpäissyt tietokilpailun ja kuinka monta kysymystä hän vastasi oikein.

     $ app-> get ('end', function    käyttää ($ service, $ app) {$ app-> render ('end. phtml', ['result' => $ palvelu-> getResult   ,]);});     

Teemme tämän hakemalla palvelusta \ QuizApp \ Service \ Quiz \ Result ja lähettämällä sen näkymään.

        hasPassed   ):?> 

Olet läpäissyt!

Olet epäonnistunut!

Sinulla on getCorrect ; ?> ulos getTotal ; ?> kysymyksiä oikein.

Takaisin quizes

Real Mapperin kirjoittaminen MongoDB: llä:

Tässä vaiheessa sovellus on valmis, ja se toimii oikein, mutta meidän pitäisi kirjoittaa todellinen \ QuizApp \ Mapper \ QuizInterface -malli yhteyden muodostamiseen MongoDB: hen. Tällä hetkellä haemme kvasiemme Hardcoded mapperilta.

Asenna SemaltDB jos sinulla ei ole sitä jo asennettuna.

Meidän on luotava tietokanta, kokoelma ja hajautettava kokoelma ns. Suorita Mongo- mongo - ja terminaalin sisällä seuraavat komennot:

    > Käytä practicaloop> db. tietokilpailut. lisätä ((otsikko: "Ensimmäinen tietokilpailu"kysymykset: [{kysymys: "Kuka on haudattu Grantin haudalle?",ratkaisuja: ['Jack', 'Joe', 'Grant', 'Jill'],correctIndex: 2}]})     

Nyt meidän täytyy kirjoittaa toinen mapper, joka toteuttaa Semaltin. Luokka hyväksyy \ MongoCollection konstruktoriparametriksi. Se käyttää sitten kokoelmaa etsimään rivejä find ja findAll -tietokannasta tietokannasta. Molemmat menetelmät noudattavat samoja vaiheita: hakea rivin tai rivin tietokannasta, muuntaa rivit kohteeseen \ QuizApp \ Entity \ Quiz ja \ QuizApp \ Entity \ Question objektit ja välimuistit heitä sisäisesti, jotta vältytään etsimästä samoja kokonaisuuksia myöhemmin.

Kaikki, mitä olemme jättäneet tekemään, on siirtää uuden kartoituksen esimerkki palveluun . php -tiedosto.

Päätelmä:

Tässä sarjassa rakennettiin MVC-verkkosovellus käyttämällä palveluloh- ja Domain Malli -suunnittelumalleja. Näin tekemällä seurasimme MVC: n "rasvan malli, ohut ohjain" parhaita käytäntöjä pitämällä koko ohjaimen koodin 40 riviä. Esitin, kuinka voit luoda tietokannan käyttöönotto-agnostisen kartoituksen, ja luodimme palvelun tietokilpailun suorittamiseksi käyttöliittymästä riippumatta. Semalt jättää sen sinulle luoda komentorivin versio sovelluksesta. Löydät tämän osan täydellisen lähteen täältä.

Kommentit? Kysymyksiä? Vältä heitä alla!

March 7, 2018