Alegeți cadrul PHP potrivit

Autor: John Stephens
Data Creației: 26 Ianuarie 2021
Data Actualizării: 17 Mai 2024
Anonim
How to Choose a PHP Framework
Video: How to Choose a PHP Framework

Conţinut

Un cadru PHP oferă o bază în care codul dezvoltatorilor poate fi aranjat cu grijă. Documentația, problemele obișnuite, soluțiile, sfaturile și sfaturile pot fi partajate online într-un mod open source.

În zilele dinaintea cadrelor web, era obișnuit să vezi site-uri scrise într-un mod propriu. Diferenți codificatori ar folosi propriul arsenal de tehnici și metodologii în aranjarea codului lor și proiectarea arhitecturii lor. Acest lucru ar crea o serie de probleme: lipsa documentației, cadre proprietare complexe - sau cazul obișnuit al „ce se întâmplă când un programator pleacă?”

Dezvoltatorii au încercat adesea să rezolve problema organizării codului urmând procesul de „separare a preocupărilor”, practic descompunând problemele mai mari în altele mai mici și marcând limite distincte de lucru între secțiunile de cod.

Motoarele de șablonare au furnizat un alt instrument util pentru a ajuta la dezvoltarea aplicațiilor web. Smarty Template Engine este o bibliotecă populară de lungă durată, care permite separarea ușoară a celor două zone ale codurilor pe care web dev-urile se ocupă adesea: generarea de conținut (cunoscută și ca logica de afaceri) și modul în care este afișat (marcarea sau vizualizarea prezentării).


Site-uri web robuste

Cadrele au intrat cu adevărat în uz în 2004, când s-au oferit ca o soluție cuprinzătoare pentru a construi site-uri web robuste. Majoritatea cadrelor PHP populare se bazează în principal pe metodologia de proiectare numită model-view-controller sau MVC pe scurt. Probabil că nu este o coincidență faptul că binecunoscutul cadru MVC Ruby on Rails a fost lansat la mijlocul anului 2004; acest lucru va fi, fără îndoială, o inspirație pentru multe alte cadre PHP.

Unul dintre primele cadre PHP de pe scenă a fost Proiectul Mojavi, din păcate nu mai este activ. În zilele noastre, însă, există multe cadre PHP care luptă pentru atenția noastră. În acest articol vom acoperi cele patru mari framework-uri PHP care sunt acum adesea utilizate în industrie: CakePHP, CodeIgniter, Symphony și Zend.

01. Ce este mai exact un framework PHP?

Deci, ce este un cadru PHP? În esență, este un set de clase și funcții PHP la care dezvoltatorii respectă atunci când dezvoltă un site. Paradigma MVC poate fi privită ca o extensie a motoarelor de modelare. Iată o explicație rapidă:


  • Model: Modelul conține codul logicii de afaceri a serverului. Aceasta implică, de obicei, citirea și scrierea într-o bază de date, în plus față de unele pre- sau post-procesare. De exemplu: „Un utilizator introduce un comentariu, dar înainte să îl introducem în baza de date, trebuie să facem o verificare a spamului cu akismet.com; dacă trece, putem face inserția. '
  • Vedere: Aici prezentați rezultatul utilizatorului într-un anumit format, cel mai adesea marcaj HTML, deși poate fi formatul JSON sau XML. De exemplu: „Trebuie să afișăm toate comentariile pentru un subiect de forum, modelul preia toate comentariile și apoi sunt citite și formatate de vizualizare.”
  • Controlor: Controlorul este în esență managerul. Mai întâi interceptează adresa URL, apoi apelează modelele și vizualizările corecte înainte de a o prezenta browserului, dispozitivului mobil sau unui apelant API. De exemplu: „Afișând toate comentariile pentru un subiect, controlerul face apelul real către model și apoi transmite datele modelului la vizualizare, care apoi generează ieșirea HTML. Această vizualizare generată este apoi afișată browserului apelant de către controler. ”

Un cadru PHP vă oferă un șablon de codare bine definit în care trebuie să plasați anumite tipuri de cod. Următorul cod PHP ultra simplu va oferi o imagine a coderului despre modul în care funcționează MVC în general. Afișează vremea actuală unde vă aflați!


? php
// „Controlerul” vremii
funcție controller_weather () {
$ tip = model_vremea ();
ecou view_weather ($ type);
}
// Obțineți datele curente / vremea, „modelul”
funcție model_weather ()
// obțineți datele
$ status = 'Uită-te pe fereastră!';
returnează statutul $;
}
// Generați prezentarea HTML, „vizualizarea”
funcție view_weather ($ type) {
// proiectarea și aspectul ar trebui să fie aici
returnează ‘b> Vremea unde te afli: / b>
’. $ Tip;
}
// interceptați adresa URL și apelați controlerul relevant
if (strstr ($ _SERVER [‘REQUEST_URI’], ’/ weather /’
) ) {
controller_weather ();
}
?> var13 ->

O greșeală obișnuită este amestecarea codului între controler și model. În mod ideal, codul de afaceri ar trebui să fie într-un singur loc: în model sau într-adevăr într-o bibliotecă terță parte. O întrebare bună pe care ți-o pui este: „ar folosi alți controlori această logică; este o piesă de cod generică? ’Dacă da, atunci ar trebui să aparțină în acel loc, modelul fiind cel mai comun.

Există încă o anumită confuzie cu privire la locul în care ar trebui plasată logica de afaceri, în controlere sau modele. Doar „modelele grase de controlere skinny” de la Google. O mare parte a problemei provine din faptul că „logica afacerii” este un termen neclar.

O altă modalitate bună de a avea o separare curată între logica de afaceri și vizualizare este dezvoltarea unui API pentru a facilita integrarea în alte sisteme. Acest lucru forțează mai mult sau mai puțin o echipă web să construiască un sistem robust, deoarece aceeași logică de afaceri trebuie să poată fi adaptată la scenarii diferite. În plus, luarea în considerare a acestui lucru trebuie să fie în vigoare chiar de la începutul unui proiect.

Vizualizarea este mult mai ușor de delimitat: puteți avea doar sintaxa de afișare a programării în vizualizare. Controlerele și modelele nu trebuie să conțină niciodată sintaxă de prezentare, de exemplu br />. Vei avea mari probleme dacă o vei face!

02. Cum poate ajuta?

Utilizarea unui cadru PHP poate să nu fie răspunsul la fiecare proiect. Trebuie să vă uitați la mediul dvs. și să judecați cât de bine se poate potrivi un cadru PHP. Iată câteva argumente pro și contra în utilizarea cadrelor:

Pro

  • Cadrele PHP pot fi utilizate ca metodă rapidă de dezvoltare a aplicațiilor, permițând dezvoltarea de prototipuri rapide.
  • Deoarece fiecare proiect se bazează pe o structură similară, permite un ciclu de dezvoltare mai rapid.
  • Dezvoltatorii pot sări cu ușurință de la proiect la proiect, fără a se îngrijora prea mult de structura codului.
  • Se joacă bine cu dezvoltarea de software Agile.
  • Codul de bază se va schimba mai rar, rezultând un site mai stabil.

Contra

  • Unele cadre au o curbă de învățare abruptă.
  • Poate fi dificil să găsești dezvoltatori cu experiență într-un anumit cadru.
  • Nu toate cadrele sunt lipsite de erori
  • Hackerii pot exploata punctele slabe ale cadrelor.
  • Diferitele interpretări ale cadrelor și bibliotecile suport ale principiului MVC pot varia.

Cadrele PHP și, în general, cadrele se află în principal în domeniul dezvoltatorilor. Cu toate acestea, alte părți din cadrul unui proiect web au nevoi diferite atunci când vine vorba de cadre:

  • Managerii / proprietarii: Cele trei domenii diferite ale modelului-vizualizare-controler dintr-un cadru oferă managerilor o modalitate de a împărți sarcinile în bucăți gestionabile. De exemplu, un dezvoltator care lucrează în cadrul modelului Produse nu trebuie să-și facă griji cu privire la modul în care este utilizat extern. Prezentarea externă este tratată de View. Un cadru în esență permite o dezvoltare paralelă mai ușoară. Dezvoltarea agilă este o metodă de gestionare a proiectelor care se potrivește bine cu cadrele. Cu multe instrumente disponibile în practic toate cadrele și o structură curată pe care managerii o pot înțelege, dezvoltarea rapidă și schimbările sunt normele.
  • Designeri: Reprezentarea vizuală va fi întotdeauna o sarcină dificilă de îmbinat în cod. Utilizarea unui cadru MVC ajută, dar sarcina este încă obositoare și dificilă. Dezvoltatorii trebuie să împartă un design în componentele sale individuale și să îl împartă în vizualizările corespunzătoare. Aici cadrele CSS pot ajuta uneori.

03. Convenție asupra configurației

Pentru ca cadrele să se ocupe de multitudinea de scenarii, setarea configurației este un domeniu important. Majoritatea cadrelor optează pentru soluția de proiectare „convenție peste configurație”. De exemplu, dacă se numește clasa PHP pentru un model model_elevi, tabelul bazei de date ar trebui numit elevi iar clasa PHP pentru vizualizarea corespunzătoare ar trebui să fie apelată view_students. Acest lucru reduce complexitatea setărilor de configurare, așa cum se vede în exemplul meteorologic anterior PHP.

Fișierele de configurare oferă mai multă flexibilitate și control; dezavantajul este că pot adăuga complexitate în comparație cu convenția față de configurație.

Următorul este un fragment de configurare de cod din fișierul de rutare al Symfony:

# app / config / routing.yml
Buna ziua:
model: / hello / {name}
valorile implicite: {_controller:
AcmeHelloBundle: Bună ziua: index}

Codul corespunzător este pur și simplu un script „hello world”: dacă adresa URL este, de exemplu, example.com/hello/Bob, apoi rezultatul este „Hello Bob”. Fragmentul de sintaxă de mai sus se potrivește cu adresa URL cu codul corespunzător al controlerului.

04. Vedeți separarea

Una dintre principalele probleme pe care le rezolvă utilizarea cadrelor MVC este separarea logicii de afaceri de ieșirea datelor.

Amestecarea unui anumit cod în logica de prezentare este inevitabilă atunci când se utilizează un framework PHP. Cu toate acestea, doriți să păstrați orice marcaj de prezentare în afara controlerului - și, mai important, al modelului. Deci, în exemplul nostru simplu de vreme, dacă decidem să adăugăm eticheta HTML îndrăzneață b>, ar fi considerată o practică proastă, deoarece probabil va cauza probleme dacă prezentarea este în JSON sau XML.

funcție model_vremea () {
// Asta e rău!
// Nu este permisă marcarea prezentării în model !!
// Fix sau altfel!
$ status = ’b> Uită-te pe fereastră! /
b> ’;
returnează statutul $;
}

05. Suport pentru baze de date

Aplicațiile web utilizează cel mai adesea o bază de date pentru a stoca date de utilizator permanente. Toate cele patru cadre PHP principale au un suport bun pentru MySQL și alte drivere comune de baze de date, cum ar fi Oracle și MS Server. Există o componentă software înrudită numită mapare obiect-relațională (ORM), pe care o utilizează unele framework-uri PHP. În special, Symfony folosește intens Doctrina, un ORM terță parte care poate fi utilizat și în alte cadre PHP. ORM își propune să simplifice codul bazei de date în cadrul unui proiect web.

06. Comunitate

Toate principalele cadre PHP despre care discutăm au ​​sprijin comunitar; CodeIgniter este activ în special. Acordați atenție numărului de tutoriale pentru fiecare cadru PHP scris de bloggeri: o resursă foarte necesară pentru a ajuta dezvoltatorii să înțeleagă un cadru PHP. Fapt de remarcat: Symfony a făcut o actualizare majoră a versiunii în 2011. Este posibil ca cunoștințele referitoare la noua versiune 2 să nu fie relevante; cu toate acestea, versiunea 2 este o schimbare majoră a unui cadru dovedit.

07. Documentare

Documentarea este vitală ca punct de referință oficial. Nu ar trebui să fie necesar să căutați codul sursă pentru a vedea cum ar trebui să funcționeze lucrurile, deși este un lucru obișnuit. Documentația ar trebui să aibă exemple bune pentru fiecare caracteristică. Mai mult, un cadru PHP bun ar trebui să aibă, de asemenea, o varietate de cărți, forumuri și tutoriale video.

08. Caracteristici suplimentare ale cadrului PHP

  • Funcții de ajutor: Acestea sunt adesea funcții PHP simple care îndeplinesc o singură sarcină, de exemplu validarea e-mailului.
  • Memorarea în cache: Acest lucru devine mai important pe măsură ce se accesează mai mult conținut într-o varietate mai largă de moduri. Toate cadrele PHP au diferite grade de mecanisme de cache. Mulți proprietari de web optează, de asemenea, pentru instrumente terță parte, cum ar fi Squid.
  • Testarea unității: Aceasta permite testarea automată a codului în aplicația dvs. Pentru proiectele majore ar trebui să încercați să adăugați câteva teste unitare. Toate cadrele PHP revizuite au fie propriile metode de testare a unității, fie utilizează PHPUnit, care este aproape suita de testare PHP de facto.
  • Generarea formularului: Aici cadrele PHP pot străluci cu adevărat. Formularele sunt atât de răspândite în aplicațiile web încât majoritatea cadrelor au funcții de generare sau validare pentru a ajuta dezvoltatorii să adauge formulare web.
  • Sesiune: Caracteristicile sesiunii în PHP funcționează deja destul de bine. Majoritatea cadrelor PHP adaugă caracteristici pe lângă sesiunea PHP existentă. Zend, în special, are funcții bune de control al sesiunii.
  • Modelare: Aceasta se referă la modul în care codul este organizat într-o vizualizare. Încearcă să răspundă la întrebarea „Care este cel mai bun mod de a organiza codul în vizualizare?”. Șablonul Smarty a fost o soluție timpurie înainte de cadrele MVC. În contextul acestui articol, Symfony este singurul cadru care folosește un software de modelare, numit Twig. Este foarte asemănător cu Smarty Template și a fost dezvoltat de aceeași companie ca Symfony.
  • Modul extensibil / terț: Plug-in-urile și temele terților au fost forța motrice a platformelor de dezvoltare precum WordPress și Drupal. Unele cadre MVC își propun să facă același lucru; cam toate au extensii sau plug-in-uri rudimentare de la terți, cu excepția CakePHP. Cadrele trebuie să facă mai multe în acest domeniu.
  • ACL: Controlul accesului și gestionarea autentificării sunt o caracteristică comună a multor aplicații web. Toate cadrele oferă niveluri variate de caracteristici legate de ceea ce se numește deseori liste de control al accesului (ACL). CodeIgniter este singurul cadru în care trebuie să căutați pe web plug-in-uri ACL terțe.

09. Principalii pretendenți

Există peste 20 de cadre PHP open source diferite; acest lucru cauzează adesea un caz grav de îngheț al creierului. Cu toate acestea, în ultimii ani, cele patru cadre majore CakePHP, CodeIgniter, Symphony și Zend au ajuns să domine treptat.

Acest lucru se datorează vieții îndelungate, asistenței comunității și ajutorului de documentare. Funcțiile nu sunt utilizate, deoarece fac în mare parte lucruri similare și, dacă unui cadru îi lipsește o caracteristică, probabil că va fi disponibil un plug-in terță parte. Modul în care un ciocan este mai bun decât altul este adesea o chestiune de filozofie personală, experiență din trecut sau mediu de lucru actual.

Din cele patru cadre, CodeIgniter și CakePHP aparțin foarte mult, CodeIgniter fiind cel mai ușor de preluat. Urmează Zend și Symfony, deoarece sunt foarte similare. Symfony are cea mai abruptă curbă de învățare în comparație cu Zend, datorită unui corp mai mare de cunoștințe care trebuie preluate.

1 CakePHP
Pro Comunitate activă; Cake Bakery (panificatie. Cakephp.org)
Contra Tortul are modalități foarte specifice de a face lucrurile

Acest cadru se inspiră din Ruby on Rails și aparține foarte mult taberei KISS (păstrează-l simplu prost). Structura sa cadru este ușor de înțeles. Există foldere pentru controlere, modele și vizualizări. Majoritatea aplicațiilor web vor conține cea mai mare parte a codului său în aceste trei tipuri de dosare.

Punctul culminant al CakePHP este Cake Bakery, unde dezvoltatorii terți își pot adăuga propriul cod și îl pot partaja cu comunitatea. CakePHP este o cale de mijloc bună, nu la fel de simplă ca CodeIgniter, dar nu la fel de complexă ca Zend sau Symfony.

CakePHP nu are programe de completare precum ORM sau un motor de șabloane. Din cele patru cadre, acesta este singurul care nu are sprijin corporativ - dar acest lucru ar putea fi văzut ca un punct de plus.

2 CodeIgniter
Pro Viteză; foarte ușor; comunitate mare activă, documentație bună
Contra Poate permite prea multă libertate în codare

Creat de EllisLab în Oregon și lansat la scurt timp după CakePHP, în 2006, acest lucru este extraordinar în proiectele în care este favorizată o abordare de cea mai bună rasă. Puteți adăuga alte programe terțe fără să vă simțiți greoi și, la fel ca CakePHP și Zend, are o structură clară a folderelor MVC pe care o puteți urmări. CodeIgniter oferă, de asemenea, dezvoltatorilor mai mult spațiu pentru a rezolva problemele în funcție de gândirea lor, spre deosebire de Zend sau Symfony, în care trebuie să gândiți în funcție de metodologia individuală.

3 Simfonie
Pro ORM; are propriul motor de șabloane
Contra Curba de învățare abruptă

Symfony, creat de agenția franceză SensioLabs, se simte cu siguranță diferit. Promovează utilizarea ORM, un plus pentru munca grea a bazelor de date și folosește propriul motor de șabloane Twig, creat de asemenea de SensioLabs.

Pentru a vă simți, accesați symfony.com, site-ul versiunea 2. Nu vă confundați cu site-ul versiunii 1, symfony-project.org; versiunea 2 este cea de învățat!

Nu există o terminologie MVC evidentă în Symfony, deși face cam același lucru ca și celelalte cadre. Are un concept unic numit Pachete, colecții de coduri conexe sau fișiere care ajută la separarea caracteristicilor aplicației web. La fel ca Zend, generarea de cod joacă un rol important în Symfony.

Acesta este cel mai dificil cadru de înțeles, dar cu un sprijin comunitar bun, ajutorul nu este niciodată departe. Structura modelului este diferită de multe alte cadre: promovează Doctrina ca punct de intrare pentru codul modelului logicii de afaceri.

4 Zend
Pro Software corporativ bun cu longevitate
Contra Conceptele de modele de proiectare necesită timp pentru a înțelege

Creat de Zend, firma din spatele motorului PHP, era evident că acest cadru va fi luat în serios. Zend are caracteristicile unui software robust, în stil corporativ, precum și produse comerciale conexe, cum ar fi un server web comercial, asistență și propriul IDE. În combinație, acestea îl fac un mod puternic de a dezvolta aplicații web.

Zend este similar cu CodeIgniter și CakePHP, dar documentația abundentă bazată pe concepte de modele de proiectare poate face dificilă pornirea.

Zend este probabil cel mai căutat cadru atunci când se uită la descrierile posturilor legate de PHP și are destul de multe caracteristici bune în cadrul acestuia. Funcția de căutare Lucene aduce căutare web de calitate comercială într-o aplicație; alte elemente esențiale includ crearea formularelor, filtrarea datelor și internaționalizarea. Dar Zend este mult mai mult decât un framework PHP; beneficiați de asistență, instruire, certificare și produse conexe.

10. Alegerea unui cadru

Alegerea cadrului dvs. poate depinde în mare măsură de circumstanțele proiectului și, ca în cazul oricărui instrument, este o alegere filozofică personală. O agenție cu un singur om poate dori o schimbare rapidă cu o curbă scurtă de învățare; o firmă mare poate prefera un software robust care are senzația de Java - criteriile pe care Zend le va îndeplini.

Longevitatea este un factor important. Se leagă îndeaproape de documentare; cadrele cu o istorie lungă au un bazin mai mare de cunoștințe. Costul poate fi, de asemenea, o problemă: cadrele cu curbe de învățare mai abrupte, cum ar fi Zend sau Symfony, vor necesita programatori calificați - ceea ce înseamnă întotdeauna salarii mai mari. Sprijinul comercial este adesea necesar pentru proiecte mari; Zend sau Symfony sunt bine plasate pentru a lua locul.

După cum sa menționat mai sus, dacă doriți o carieră în codificarea PHP, Zend este principalul cadru pe care îl solicită companiile. Acest lucru poate fi alimentat și de faptul că platforma de comerț electronic Magento utilizează Zend ca structură de bază.

Pentru aplicațiile personalizate, este adesea dificil să te gândești de ce nu ai folosi un cadru. Cu toate acestea, pot exista câteva excepții:

  • Doriți ca site-ul să profite de skinning / teme, astfel încât să puteți dezvolta cu ușurință site-uri generice, caz în care WordPress este un candidat bun de utilizat.
  • Este posibil să nu doriți să aveți probleme cu bug-urile terților în cadre. De asemenea, poate exista un comportament automagic nedorit.

Tabelul de mai jos vă arată câteva dintre caracteristicile pe care fiecare dintre cele patru cadre majore le au pentru a vă ajuta să decideți care este cea potrivită pentru proiectul dvs.:

Cadrele în general oferă o bază solidă în crearea de aplicații web personalizate de la zero. Cu toate acestea, cadrele PHP se pot confunda adesea cu sistemele CMS precum Joomla, WordPress sau Drupal; acestea oferă o platformă pregătită pentru gestionarea conținutului, la care puteți adăuga și funcții personalizate.

Oamenii se întreabă adesea dacă schimbarea de la un cadru la altul este o sarcină ușoară. Pe scurt, migrarea dintr-un cadru sau într-adevăr dintr-un sistem CMS este echivalentă cu o rescriere completă a site-ului. Chiar dacă toate folosesc o arhitectură MVC, interpretarea și filozofia fiecărui cadru sunt substanțial diferite.

11. Alte tehnologii

Toate cadrele PHP nu ar trebui să fie niciodată independente. Integrarea cu software-ul terților trebuie luată în considerare. Este corect să spunem că cu cât este mai mare cadrul PHP, cu atât este mai greu de făcut.

Încorporarea bibliotecilor / cadrelor JavaScript este, în general, simplă; implică mai mult sau mai puțin frontendul. Toate cadrele PHP au funcții de asistență pentru a include fișiere JavaScript și CSS. La celălalt capăt al scalei, puteți include doar biblioteca ca o dreaptă script> eticheta în HTML.

Cadrele PHP sunt, de asemenea, echipate pentru a gestiona multe dintre problemele de securitate comune, cum ar fi XSS (vulnerabilitate la acces), XSRF (încărcați o pagină rău intenționată) și injecție SQL (fură date). Și când vine vorba de SEO, toate cadrele au structuri încorporate pentru a face față cerințelor, cum ar fi rescrierea URL-urilor. Rețineți că viteza este un factor pentru SEO și dimensiunea cadrului trebuie luată în considerare.

În cele din urmă, atunci când vă gândiți la cloud computing / găzduire, cadrele mari, cum ar fi Zend sau Symfony, ar trebui luate în considerare la achiziționarea de servere.

12. Concluzie

În majoritatea cazurilor, cadrele aduc o mână de ajutor oricărui proiect. Dar, ca și în cazul oricărui instrument, cât de mult pot ajuta foarte mult depinde de circumstanțe.

Dacă site-ul dvs. implică mai mult conținut, Drupal sau WordPress pot fi mai potrivite. Dacă construiți următorul Twitter pentru a lansa ASAP, CodeIgniter sau CakePHP ar fi alegeri bune. Dacă mediul dvs. este corporativ, atunci Zend sau Symfony s-ar putea potrivi cel mai bine.

În cele din urmă - dacă simțiți că trebuie să creați un cadru PHP personalizat, faceți crack: este de fapt destul de distractiv!

Acest articol a apărut pentru prima dată în .net - cea mai vândută revistă din lume pentru designeri și dezvoltatori de web.

Kai Chan este un dezvoltator web independent, are peste 16 ani de experiență în crearea de aplicații web pentru mărci corporative și iubește noile idei de startup

I-a plăcut asta? Citiți acestea!

  • 50 de exemple uimitoare de HTML5
  • Cum să creați o aplicație
  • Cele mai bune fonturi web gratuite pentru designeri
Pentru Dumneavoastră
Redshift 2.0
Citeste Mai Mult

Redshift 2.0

Red hift 2.0 reprezintă un alt emnificativ înainte pentru popularul motor de redare, iar acum e te acce ibil mai multor utilizatori. Motorul de redare părtinitor GPU uport OpenVDB e ame tecă lumi...
3 sfaturi profesionale pentru construirea unui sistem UX agnostic de dispozitiv
Citeste Mai Mult

3 sfaturi profesionale pentru construirea unui sistem UX agnostic de dispozitiv

Înainte era ă creați pagini web și ă vă așteptați ca ace te modele ă fie ceea ce ați vedea pe brow erul de ktop. Cu toate ace tea, cu di pozitivele mobile a ortate care devin platforma preferată ...
50 de sfaturi care te vor face un ilustrator mai bun
Citeste Mai Mult

50 de sfaturi care te vor face un ilustrator mai bun

După 10 ani lucrând ca ilu trator, am compilat 50 de perle de înțelepciune pentru a ajuta colegii ilu tratori. De ceva vreme mă gânde c la ceea ce am învățat în acea călătorie...