Jokaisella on oma joukko työkaluja. Kuten a PHP-kehittäjä , yksi suosikeistani on Nooku-niminen Rapid Application Development Framework. Sanojen mukaan kehitysryhmä : 'Nooku on pikemminkin web-kehitystyökalu kuin kehys'.
Jos et ole perehtynyt siihen, ole Katso . Se on avoimen lähdekoodin projekti, joka käyttää paljon teollisuuden hyväksymiä suunnittelumalleja tuottamaan erittäin komponentoituja sovelluksia, jotka ovat helposti laajennettavissa ja uudelleenkäytettäviä (alun perin yhden johtaa Joomla! kehittäjät ). Nooku tarjoaa sinulle alusta alkaen paljon nopeita sovelluskehitystyökaluja hankkeita irti maasta nopeammin. Pieni, mutta vahva näyte:
Nookun ytimessä on 'Composition over Inheritance' -periaate (itse asiassa se on ensimmäinen käsite Nooku-esittelysivulla. Yhdellä rivillä: sinun tulisi pyrkiä säveltämään (tai lisäämään) useiden objektien toiminnallisuus luomaan joitain eräänlainen yhdistelmäobjekti sen sijaan, että luotettaisiin alaluokkiin.
Tämän periaatteen avulla voit kirjoittaa vähemmän koodia ja johtaa usein melko tyylikkäisiin ratkaisuihin. Joten miten sitä mainostetaan? No, kooditasolla parhaat esimerkit saadaan Mixinsin ja resurssi- / palvelutunnisteiden avulla. Katsotaanpa.
Ennen PHP 5.4: ää kielellä ei ollut käsitystä Piirteet . Nämä ovat luokan kaltaisia rakenteita, jotka objektin käytettäessä tarjoavat jonkinlaisen toiminnallisuuden (samanlainen kuin moniperintö). Nooku on ratkaissut tämän ongelman vuosien ajan (PHP 5.2: sta lähtien) Sekoita joukkoon .
Mixin antaa sinun paitsi sommitella objekteja yhdessä, myös lisätä kunkin sekoitetun objektin menetelmät yhdistetyn objektin käyttöliittymään. Sekoitusta käyttävä esine näyttää 'periävän' sekoitetun kohteen menetelmissä.
/** * Mixin an object * * When using mixin(), the calling object inherits the methods of the mixed * in objects, in a LIFO order. * * @param KMixinInterface $object An object that implements KMinxInterface * @return KObject */ public function mixin(KMixinInterface $object) { $methods = $object->getMixableMethods($this); foreach($methods as $method) { $this->_mixed_methods[$method] = $object; } // Set the mixer $object->setMixer($this); return $this; }
Lähes kaikilla Nookun kohteilla on tämä kyky, koska ne laajentavat KObject-perusluokan, joka määritti Sekoita joukkoon menetelmä.
Nookun ohjainarkkitehtuurin pääluokat ovat myös KObjectin jälkeläisiä. Abstrakti ohjain on KControllerAbstract-luokka ja tarkastuksen avulla voit nähdä, että se hyödyntää sekoituskykyä heti. Aina kun luodaan tämän luokan ilmentymä, KMixinCommand- ja KMixinBehavior-toiminnot lisätään välittömästi sen käyttöliittymään. Näin ollen jokainen Nookun ohjain koostuu komentoketju- ja käyttäytymishallintatoiminnoista vastaavien objektien kautta.
Miksi K kaikkien luokkien nimien edessä? Nookun pääkirjasto on nimeltään 'Koowa'.
Palataan Nooku-ohjaimeen: KMixinBehavior-luokka pitää sisällään kaikki palat, jotta KControllerAbstract antaa mahdollisuuden ladata erityisiä Käyttäytyminen ajon aikana. Käyttäytymisstrategiat ovat luokkia, jotka kuvaavat prosessia tai logiikkaa, joka voidaan erottaa toisista luokista ja käyttää niitä (esim. Muokattava, järjestettävissä). KMixinBehavior on melko yksinkertainen ja sillä on vain neljä tapaa: getBehavior, hasBehavior, addBehavior ja getBehaviors. Ja se on kaikki mitä tarvitsemme antaa esineelle kyvyn käsitellä ja kapseloida erilaisia käyttäytymisstrategioita.
Vastaavasti KMixinCommandilla on vain kolme tapaa: getCommandContext, getCommandChain, setCommandChain. Jos et ole arvannut, nämä kolme menetelmää tarjoavat KControllerAbstractille mahdollisuuden toteuttaa komentoketju, mutta antaa sen tehdä sen ajon aikana.
Voit ajatella tätä sekoitusta yksinkertaisena aritmeettisena lisäyksenä:
Antaa meille käyttöliittymän, joka näyttää tältä: 
Määritelmän mukaan abstraktit luokat on tarkoitettu laajennettaviksi, joten perintötaikuuden avulla kaikki objektit, jotka ovat lapsia, tai KControllerAbstractin esiintymät saavat myös kyvyn lisätä käyttäytymistä ja komentoketjua ajon aikana.
Kuulostaa siistiltä. Mutta mitä se itse asiassa tarkoittaa? Lyhyesti sanottuna Nooku tarjoaa komponentoituja toimintoja; toisin sanoen Nookun avulla voit moduloida toimintojasi ja sommitella toiminnot moduulien välillä ajon aikana.
Nämä kaksi esimerkkiä osoittavat koostumuksen. Ne paljastavat myös Nooku RAD -kehyksen tuen jatkokoostumukselle sen ytimessä. Tämä on tärkeä etu. Edellä KControllerAbstractiin lisätyt menetelmät tukevat 'Strategian suunnittelumallia' antamalla kehittäjille työkalut kapseloida mitä vaihtelee ennen kuin yksi koodirivi on kirjoitettu. Se, että mixin () -menetelmä on osa jokaista KObject-laajennusta, tarkoittaa, että voit helposti määrittää ja lisätä muita käyttäytymishallintarajapintoja useimpiin kohteisiin ajon aikana.
Nookun palvelu- ja resurssitunnisteet ja paikannuslaitteet tarjoavat myös voimakasta tukea huolenaiheiden erottamiseen.
Katsotaan jälleen KObjectia, mutta myös KServicea. Voimme käsitellä suurinta osaa Nookussa palveluista tai resursseista ja sellaisenaan välittää ja kuulustella niitä täsmälleen samalla tavalla.
Ajattele palvelua jotain, josta saat resurssin. Kaikki palvelut ovat resursseja, mutta kaikki resurssit eivät ole palveluita
Kun menet ruokakauppaan ja ostat tuotteen, ajattele kauppaa palveluna, eli kokoelmana tuotteita, jotka voit B rivikivi; ja tuote resurssina, eli yksi tuote / ratkaisulogiikka, joka voi olla:
Ottaen tämän esimerkin vielä pidemmälle, kuvittele, että ruokakaupassa on franchising-osasto ja haluat olla liiketoimintaa. Tässä tilanteessa palvelu on franchising-osasto ja resurssi on ostamasi ruokakauppa. Se on hyvin kontekstuaalinen luokittelu. Kokonaisuutena tämä tunnetaan nimellä LEIVÄ toimintamalli (Näet nämä kaikki edustettuna KControllerService ja KControllerResource välillä, jotka on valmiina merkinnällä ‘_action’, ts. _actionRead ()).
Malli voi olla palvelu, taulukko-objekti voidaan ajatella palveluna, tietty MVC-kolmikko on instantioitu resurssina tai palveluna, kun taas tietty palvelun kyselystä saatu tietue voidaan ajatella resurssina.
Jokainen Nookun kohde on esineistä koostuva koostumus, koska jokainen niistä sisältää viittauksen koko sovelluksen välittömiin palveluihin palvelukontissa ja menetelmän päästä palveluihin nimeltä getService (). KObject :: getService () -menetelmä vaatii vain, että välitämme kelvollisen resurssitunnisteen ja se palauttaa välittömän palvelun käyttövalmiiksi.
PHP: n nopeassa sovelluskehityksessä resurssitunnisteet tarjoavat meille tehokkaan tavan irrottaa objektin ilmentyminen sen luokan nimestä ja tarjota siten aliaksia tälle tunnistukselle. Tällä on merkittäviä vaikutuksia sovelluksen ylläpidettävyyteen. Aliaksen avulla kehittäjä voi muuttaa kaikkien objektien käyttämää luokkaa, joka on ilmentynyt tietyllä tunnisteella, lisäämällä yksi koodirivi KService :: addAlias (): lla.
Esimerkki meille tunnetusta resurssitunnisteesta on URI tai Uniform Resource Identifier:
Nämä ovat kaikki tarvittavat tiedot, jotta KService löytää sopivan luokan ja ladata sen. Nämä kappaleet sopivat yhteen Nookun luokkien nimeämis- ja sijoittamiskäytäntöjen kanssa, jotka tarjoavat sijoittelun ja välitön ennakoitavuus. Yläpuolelta tuleva tunniste (com: //site/user.database.table.user) yrittää ladata tiedoston /components/com_user/databases/tables/user.php, jolla on luokan nimi ComUserDatabaseTableUser. Muuten, jos tiedostoa ei ole olemassa, kehys antaa sinulle oletustaulukko-objektin ja rakentaa sen tietokannan nimeämisen ja id-skeeman käytäntöjen perusteella (tämä kiinnitti minut vielä). Kuten aiemmin mainittiin, KService antaa sinun myös asettaa aliaksia tunnisteillesi. Käyttämällä KService::setAlias('maindbaseadapter','com://admin/default.database.adapter.mysqli')
; avulla voimme ladata db-objektin KService::getService(‘maindbaseadapter’)
: lla.
Tämä antaa meille irrotuksen, josta puhuimme, ja tarjoaa huomattavan edun sovellusten ylläpidossa ja laajentamisessa. Voimme luoda tarvittaessa muita sovelluksia kuin sivustoja ja järjestelmänvalvojia, ja tässä kuvattujen tunnisteiden avulla voimme käyttää muissa sovelluksissa olevia palveluita helposti auttaaksemme ratkaisuitamme vastaamaan heidän vaatimuksiinsa. Tämä on jälleen yksi esimerkki siitä, kuinka Nooku tarjoaa PHP- ja RAD-kehittäjille ja tiimeille tukea paitsi yhden luokan objektien, myös kokonaisen palvelun ja sovellusten koostumukselle ... ilmaiseksi.
Perintöosuus ytimessä; älykkäät, jo olemassa olevat kokoonpanot ja rakenteet, jotka tukevat muita amalgaameja ja ilmaisen palvelukeskeisen arkkitehtuurin, jossa on kuvatut tunnisteet, Nooku tarjoaa tehokkaan RAD-kehyksen, jolla on merkittävä etumatka vertaisverkkoonsa nähden PHP-kehitys työkalut.