Panel diskusija - usporedba Web frameworka (IT Showoff)

Post on 28-Jun-2015

1.978 views 5 download

description

Kod izrade web projekta postoje razne mogućnosti odabira frameworka na kojem će se projekt bazirati. Mi smo odlučili izdvojili pet glavnih frameworka te oko njih izgraditi kvalitetnu panel diskusiju.Vjerujemo da većina developera koji će sudjelovati na IT Showoff konferenciji su barem u jednom trenutku svoje karijere radili web site ili web aplikaciju na nekom od odabranih frameworka. Isto tako, vjerojatnost da su koristili, i temeljito isprobali sve njih, je vrlo mala. Zato nam je cilj putem kompetentnih stručnjaka pokušati publici prenijeti iskustva vezana za pojedine tehnologije, njihova osnovna svojstva, prednosti i mane.Panelisti su svi od reda pravi majstori svog zanata, te će usporedno proći važna svojstva svakog frameworka i usporediti ga s drugima.

Transcript of Panel diskusija - usporedba Web frameworka (IT Showoff)

Panel diskusijaUsporedba web frameworka

Uvod

Ideja

• Svi su se susreli s nekim tehnologijama

• Rijetko tko je probao sve• Dovesti top stručnjake za svaku

tehnologiju

Ekipa

Mislav Marohnić / Rails

• Rails Core• Programiranje kao hobi i posao• Povijest: C++ (faks), PHP

(standardno)• Radio uglavnom za web startupe

Stjepan Zlodi / Django

• 24 sata digital Rođen u godini čovjekovog prvog

poznatog spuštanja na Mjesec Računalima se počeo baviti u

Orwellovoj godini Razvio sklonost prema RAD-u Produktivna lijenost

Hrvoje Hudoletnjak / .NET

• Novatec• Visual Basic -> ASP -> ASP.NET (c#)• Izrada poslovnih aplikacija na

internet platformi (RIA, SOA, ...)• Silverlight• MVC + HTML/Javascript• TDD, DDD, Agile

Goran Jurić / Zend Framework

• NCL Media Grupa• Prvu stranicu napravio 1998.godine• PHP-om se bavi > 8 godina • Zend Framework prati od v 0.1• Sa v1.5 započeo razvoj CMS-a za

potrebe kompanije

Zoran Regvart / Spring

• CROZ• Z80 asm/Basic, Pascal , C/C++ , PHP,

Java, Ruby, Python, C#• PHP/HTML freelancer (davno)• arhitekt @ Croz d.o.o.

www.croz.hr (predugo)

Moderator

Tomislav Car

• Infinum• ex.PHP• svašta non web (Java Micro Edition,

Flash)• Danas: Ruby on Rails

Programski jezik

Programski jezik / Rails

• Ruby dynamic & strongly typed sintaksa dizajnirana da sadrži što manje

“interpunkcije” (npr. zagrada, točke-zarez)

među nekoliko najkorištenijih skriptnih jezika na svijetu (osim u našim krajevima)

započet 1995 puts “hello world”

Programski jezik / Django

• Python 1991. Guido van Rossum I objektno i strukturirano i funkcionalno Održavajte razmak Čitljivost na razini pseudo koda Baterije uključene Vrti se na svim (glavnim) platformama

Programski jezik / .NET

• C# Statički, objektni, kompajlirani, managed▪ V3: LINQ (funkcijske karakteristike)▪ V4: dynamic (dinamički tipovi)

Common Language Runtime Predstavljen 2001

Programski jezik / .NET

• Uz C#VB.NET F# IronPython IronRuby ...

Programski jezik / ZF

• PHP dynamically typed C-like sintaksa ($, {}, ;) Kreiran 1995 (Personal Homepage Tools) 2000 – PHP 4 (Zend Engine) 2004 – PHP 5 (novi objektni model) 2009 – PHP 5.3 (namespaces, late static

binding, lambda račun,…)

<?php echo “Hello World”;?>

Programski jezik / Spring

• Java objektno-orijentirani statički prevedeni (compiled) u bytecode interpretiran u virtualnoj mašini (JVM)

[JIT!] garbage collector

Programski jezik / Spring

• ideja je izbjeći tipične programerske pogreške

• ~15 godina, Open Source (GPL) verzija 6 od 2006, zadnji update prošli

mjesec verzija 7 ove godine (invokedynamic,

closures, fork/join)

Framework

Framework / Rails

• Objavljen 2004• MVC, REST• convention over configuration• open source• cross-platform• razvojna okolina

napredni tekstualni editor Postoje i IDE-u, ali nisu toliko popularni

Performanse / Rails

• zadovoljan performansama• pruža puno mehanizama za

skalabilnost• ako nečime nisam zadovoljan, to

promijenim/popravim (Rails core contributor)

Framework / Rails

• Template sustav sličan PHP<html><%= ruby_code_here %></html>

• AJAX helpers Prototype.js/jQuery

• Ugrađena podrška za XSS CSRF SQL injection

Framework / Django

2003. 2005. - prva objava Open source (MIT) Linux, Mac, Windows, FreeBSD,

Solaris... Okruženje više razine, čisti,

pragmatični dizajn Modularnost

Framework / Django

• Skalabilnost• Cache – na razini aplikacije, procedura,

dijelova template koda• memcached, baza, memorija, datotečni sustav

• Odvojeni statični i dinamični dijelovi aplikacije

• Sigurnost• urls.py – prva linija obrane• SQL injections• XSS, CSRF

• django.contrib

Framework / Django

• MTV• Models • Templates• Views

• URL-s• Regex• Imenovanja• {% url ima_ime %}

Framework / Django

• Razvojna okolina• Python, Django, napredan editor• Ugrađeni razvojni web poslužitelj

• manage.py• syncbd, inspectdb, loaddata - dumpdata, shell, dbshell,

makemessages – compilemessages, sqlflush, sqlreset

• Posebni alati• django-command-extensions• django-debug-toolbar

Forma / Django

Forma / Django

Framework / ASP.NET

• 2001. v1, 2010 v4• WebForms, MVC, REST-style

(OpenRasta)• konfiguracija ili/i konvencija• Open source, MS licenca• Windows (IIS)• Implementacija CLI specifikacije

Mono, veći dio .NET Framoworka radi na Linuxu (MVC radi)

Framework / ASP.NET

• visoke performanse, jednostavan multithreading

• Osmišljen na skalabilnost• Veliki framework, pokriva enterprise

scenarije WCF, WF, WPF, Azure

• MVC pogodan za web2.0 Stackoverflow.com: 1 mil. hits / dan – 1

web server, 1 db server MySpace.com

Framework / ASP.NET

• View engines: WebForms, Spark, nHaml, nVelocity, ...

• ASP.NET AJAX, jQuery• Security

XSS, CSRF, SQL injection – većim dijelom ugrađeno u framework

U v4 automatska enkodiranje za html

Framework / ZF

• Razvoj započet 2006 godine• MVC paradigma, ali i set nezavisnih

komponenti• Puno više konfiguracije (od

konvencije)• Zahtijeva PHP 5.2.0 ili noviji • open source (New BSD licenca)

▪ svi kontributori potpisuju CLA

Performanse / ZF

• Hello world benchmark

• Opcode cache (APC) neophodan

Framework Req/s

PHP 1320

Cake 1.1.19 118

Symphony 1.1.0 67.41

Zend Framework 1.6 77.85

Performanse / ZF

• Zend_Cache Frontend: Core, File, Class,

Frontend_Output, Page Backend: File, APC, Xcache,Memcached,

Sqlite, TwoLevels

Skalabilnost / ZF

• Skalabilnost Podrška za pohranu sessiona u

memcached ili bazu podataka Zend_Db nema podršku za rad sa više

instanci baze podataka (master – slave replikacije)

Dijelove frameworka je moguće prilagoditi (i pojednostaviti) bez diranja core-a

Templating / ZF

• View & Layout Two-Step View Pattern

• Zend_View je moguće zamijeniti sa implementacijom po želji Smarty?

• ZendX_Jquery komponenta• Podrška za escape-anje prilikom

ispisa• View Helperi

Framework / Proljeće

• ~2002/3 g. trenutna verzija 3.0

• Open Source, Apache License 2.0• Plain Old Java Objects (POJO)• Inversion Of Control (IOC),

Dependency Injection (DI)• Aspect-oriented programming (AOP)• Konfiguracija i konvencije

Spring Web Stack

Spring Core

Spring MVC

Spring Web Flow

Spring JavaScript

Spring Security

Spring FacesSpring BlazeDS

Integration

Framework / Spring

• jedna od komponenti Spring Framework-a

• izgrađen nad JEE standardima i best practices

• Servlet (standalone) i Portlet varijante (portal)

• Representational State Transfer (REST)

• Konvencija naspram konfiguracije

Framework / Spring

• Podrška za view tehnologije templateing (od JSP, freemarker, Facelets

do Tiles, Sitemesh) razni output-i (PDF, Excel, RTF, XML,

JSON...)• za AJAX @MVC support ili DWR

(potpunije)• (Spring) Security

Autentikacija / Autorizacija (RBAC) ACL

Obrada podataka / Spring

• custom validatori, bean validation (JSR-303)

• fleksibilne validacijske poruke• podrška za bindanje i transformaciju

podataka (spring taglib, property editors, type converters)

Framework / Spring

• nasljeđuje izvrsne performanse JVM-a / JEE-a

• horizontalna i vertikalna skalabilnost (jasno ovisi o aplikaciji)

• development proces je izuzetno produktivan

• application serveri se bave resursima (connection pool, transaction management, clustering, load balancing)

Obrada podataka / Form

<html><body> <form:form modelAttribute="account" method="post"> <p> <form:label for="name" path="name" cssErrorClass="error">Name</...> <form:input path="name" /> <form:errors path="name" /> </p> <p> <form:label for="balance" path="balance" cssErrorClass="error">Balance</...> <form:input path="balance" /> <form:errors path="balance" /> </p> <p> <input type="submit" /> </p> </form:form></body></html>

Obrada podataka / Modelpublic class Account {

private Long id;

@NotNull@Size(min=1, max=25)private String name;

@NotNull@NumberFormat(style=Style.CURRENCY)private BigDecimal balance = new

BigDecimal("1000");

// getteri setteri...}

Obrada podataka / Controller@Controller@RequestMapping(value = "/account")public class AccountController {

@Autowired private AccountDao dao;

@RequestMapping(method = RequestMethod.POST) public String create(@Valid Account account, BindingResult result) { if (result.hasErrors()) { return "account/createForm"; }

dao.create(account);

return "redirect:/account/" + account.getId(); }

@RequestMapping(value = "/account/{id}" method = RequestMethod.GET) public Account create(Long id) { return dao.read(id); }}

Pristup bazi podataka

Baza podataka / Rails

• ORM ActiveRecord

• Nije nužan, po novome je relativno jednostavno ugraditi drugi ORM DataMapper, Sequel, MongoMapper...

• MySQL, PostgreSQL, SQLite• druge relacijske baze podržane kroz

adaptere instalirane dodatno

Baza podataka / Rails

• podrška za validacije• laka izgradnja kompleksnih HTML

forma

Baza podataka / Django

PostgreSQL, MySQL, SQLite, Oracle Django ORM SQLAlchemy, Storm

Firebird, MS-SQL, DB2 CouchDB, MongoDB Migracija

django-evolution, south, dmigrations

Rad s podacima / Django

Baza podataka / .NET

• ORM od MSa Entity Framework , Linq2SQL

• Open Source Nhibernate, ActiveRecord, SubSonic, ...

• Komercijalni LLBGen, LightSpeed, ...

• Baze MSSQL, Oracle, MySQL, PostgreSQL, SqlLite,... (L2S

samo MSSQL, EF i Oracle)• LINQ podržavaju svi:

Var comments = from c in db.Comments where c.Post.Author == „John Doe” select c;

Baza podataka / .NET

• Automatska client i server validacija• DynamicData Scaffolding framework• Templating engine za kreiranje View-

ova prema danom modelu• MVC data binderi, custom binderi

(Castle)

Baza podataka / ZF

• Zend_Db – Database abstraction layer Lazy loading konekcija na bazu Parametrizirani upiti Transakcije Profiler Paginator

• Zend_Db_Table Table & Row Data Gateway Pattern

• MySQL, Sqlite, MsSQL, Oracle, Postgres

Baza podataka / ZF

Baza podataka / ZF

• Validacija podataka vezana uz forme• Zend_Form

Elementi Dekoratori Validatori

• Nažalost ne postoji mogućnost automatskog kreiranja administracije (CRUD) iz modela

• Doctrine kao ORM

Baza podataka / Spring

• od JDBC (osnovni Java API)• do Hibernate (fullblown ORM)• Konzistentni API / Exception handling• Template Method Pattern pristup• Deklarativni transaction

management

Spring + Hibernate

@Repositorypublic class HibernatePersonDao extends HibernateDaoSupport implements AccountDao {

public void create(Account account) { getHibernateTemplate().save(account); }

public Account read(Long id) { return getHibernateTemplate().load(Account.class, id); }

public void update(Account account) { getHibernateTemplate().update(account); }

public void delete(Account account) { getHibernateTemplate().delete(account); }}

Testing

Testing / Rails

• Rails ohrabruje testing• unit testing (models), functional

testing (controllers), performance testing

• 3rd party alati za ubrzavanje testova• jednostavna sintaksa

osnovni test se može napisati u 2-3 linije• ovisno o testing frameworku, testovi

mogu biti vrlo opisni (pri čitanju)

Testing / Django

test.py u svakoj aplikaciji doctest

pythonic unittest

JUnit like django.test.client.Client

jednostavni web klijent

doctest

unittest

django.test.client.Client

Testing / .NET

• MSTest, nUnit, xUnit• MSpec, NSpec, Nbehave

ala Ruby Cucumber • Test Runners, CI• Mocking i Stubing:

Moq, Rhino Mocks, Type Moq• IoC/DI (StructureMap, Unity, AutoFac,

Castle Winsdor,...) Za bolji dizajn i arhitekturu (SOLID

principi)

Testing / ZF

• Prošireni PHPUnit (Controller_Test_Case) PHPUnit test case sa dodacima za

testiranje MVC dijelova frameworka Inspekcija DOM-a koristeći CSS

selektore:

$this->assertQueryCount('form#loginForm', 1);

• Zend_Test_PHPUnit_Db

Testing / Spring

• podrška za Junit ali slobodno je koristiti neki drugi

(TestNG)• unit testing• function testing (+populacija (in

memory) baze)• svi moderni alati za testiranje

mocks, stubs, coverage...

Reusability

Reusability / Rails

• pluginovi• “Rails Engines” - vertical slices• extra mounted frameworks

Reusability / Django

Django projekt se sastoji od aplikacija Dobro koncipirane aplikacije se mogu

koristiti u bilo kojem projektu Modeli, template, url-ovi… Primjer projekta: pip install -r

requirements.txt Middleware Template tagovi

Reusability / .NET

• ASP.NET Custom Controls – resuable• MVC Html Helpers• Veliki broj open source i

komercijalnih biblioteka gotovih komponenti CodePlex.com

Reusability / ZF

• Controller Pluginovi ,action i view helperi se nalaze u vlastitom “namespace-u”

• Postoji podrška za module no nisu baš najsretnije riješeni

Reusability / Spring

• mnogi Java projekti nude integriraciju sa Spring Framework-om (npr.:) validacije (Hibernate Validation) AJAX (DWR) WS-* / SOAP (Apache CXF)

• generalno, dobar dio kôda se generalizira i iskoristi na slijedećem projektu razni util-*, validation-*, conf-* i sl.

Razvoj

Razvoj / Rails

• troškovi razvoja mali• Ruby profesionalci su često skupi• Ruby programeri slabo dostupni u

Hrvatskoj i Sloveniji

Učenje / Rails

• dokumentacija Railsa je u početku bila jedna od velikih mana, ali danas je jako dobra

• “learning curve” - lagan• community je obilan kvalitetnim

blogovima i screencastovima

Razvoj / Django

Troškovi razvoja Razvojni alati od 0 kn Produkcijska okolina od 0 kn

Troškovi programera Isplati se platiti više

Dostupni programeri Malo ih je Laka prilagodba

Učenje / Django

Learning curve– Potrebna predznanja

Dokumentacija– http://docs.djangoproject.com– http://djangobook.com/– http://diveintopython.org/

Zajednica– http://djangopeople.net/

Razvoj / .NET

• Visaul Studio Express 2008 – besplatan Vrhunski, najbolji IDE ;) Resharper, CodeRush, ... MonoDevelop na Linuxu

• MS SQL Server Express – besplatan• Hosting:

Shared: od 5$/mj (hr: cca 200-300 kn/god) VPS: od 15$/mj BizSpark, WebSpark programi (besplatne

licence)

Učenje / .NET

Potrebno poznavati OOP ASP.NET

mogućnost Mouse Driven Developmenta ASP.NET WebForms za Windows

programere MSDN Library

300 namespaceova, 14 000 klasa, 70 000 metoda

Specijalizacija za web, win, data, ... Mnoštvo video tutoriala

(www.asp.net)

Razvoj / ZF

• Zend Studio 399$ (godinu dana)

• Još uvijek relativno mali broj programera s naprednim poznavanjem frameworka

• Za razliku od drugih PHP frameworka iza ZF-a stoji kompanija Symphony i Solar su više-manje one-

man band projekti

Učenje / ZF

• Krivulja učenja je dosta strma Neophodno dobro poznavanje OOP-a

• Dokumentacija Solidna, ali mogla bi biti i bolja Ponekad neophodno zaviriti i ispod haube

• IDE: Zend Studio, Netbeans, ... Autocomplete!

• Community Blogovi, mailing lista, Confluence wiki

Razvoj / Spring

• razvoj je nešto sporiji u početku (ukoliko se ne nasljeđuje znanje) primjeri sa predhodnog projekta npr.

• na tržištu postoji puno Java programera nažalost vrlo malo gurua

• Java developeri voze dobra kola napunjena manekenkama

Učenje / Spring

• u CROZ-u za 2-3 tjedna developer je produktivan naravno ovisno o predznanju - inhouse tečaji,

mentorstvo• barem 3 state-of-the-art razvojna alata

Eclipse (SpringSource Tool Suite), Idea, NetBeans

• nevjerojatno (za developere) ažurna i potpuna dokumentacija

• pregršt blog-ova, izvrstan forum, plativi support

Top lista nadrealista

Top 5 + / Rails

1. “opinionated”2. RESTful konvencije3. form builder4. ActiveRecord5. caching helpers

Top 5 - / Rails

1. nije za sve aplikacije2. do nedavno su se koristile loše

JavaScript prakse3. nije dobar za početnike u web

developmentu4. “skriva” neke mogućnosti relacijskih

baza5. nije optimalan za izgraditi aplikaciju

na “legacy” bazama

Top 5 + / Django

1. Kompletno rješenje2. Kvaliteta izrade3. Admin4. URL-ovi5. Dokumentacija

Top 5 - / Django

1. Slaba podrška kod hosting providera2. (Pre)dinamični razvoj3. Mali broj raspoloživih programera4. Ne postoji Django IDE5. Ne ide bez komandnije linije

Top 5 + / .NET

1. C# (OOP, LINQ, dynamic)2. Visual Studio 2010 + Resharper3. Brzina i skalabilnost4. RAD: WebForms vs MVC5. Silverlight

Top 5 - / .NET

1. Kompleksna konfiguracija, malo konvencije

2. Over-engineered3. Zatvorenost frameworka - tight

coupling4. MSDN vs ALT.NET: 5. Slaba navika open source-anja

Top 5 + / ZF

1. Prilagodljivost2. Velik broj komponenti i podržanih

servisa3. Razdrađena podrška za caching4. Backward compatibility5. Baratanje formama

Top 5 - / ZF

1. Podrška za drop-in module2. Punokrvi ORM (Doctrine u 2.0)3. Generiranje admin sučelja4. Neke komponente nisu održavane5. Službena podrška za Dojo ?!?

Top 5 + / Spring

1. Loose coupling (DI, POJO) = Maintainability

2. REST podrška u v33. Auto konfiguracija (konvencije)4. Spring Roo = Rails kakav bi

Springovci napisali5. Web Flow = podrška za kompleksne

forme, wizardi, tokovi ekrana

Top 5 - / Spring

1. Količina tehnologije / frameworka / opcija / troslovnih akronima za pohvatati

2. Hosting? (AppEngine)3. Sloboda developera da brljavi (ako

uspoređujemo sa striktnim konvencijama drugih frameworka)

4. @Hell - više anotacija nego kôda5. XML hell - više XML-a negko kôda

(manjak primjene konvencija)

Završna misao

Rails

• stavite framework na probnu vožnju na nekom konkretnom problemu.

• ne vjerujte popularnosti, samo dojmu koji steknete u tom pokusu.

Django

• Django je cjelovito rješenje, ali bilo koji modul se može zamijeniti bez da se ostatak konstrukcije sruši

• Django je moćno jednostavan. Za sve ostalo...

$ python>>> import this

ASP.NET

• Framework prilagođen za enterprise korporativne scenarije i za web 2.0 start-upove

• RIA sa Silverlightom• Slušati zajednicu, pridonositi,

pokušati pratiti izdavanje novih frameworka

Zend Framework

• Odabir frameworka je dugoročna investicija

• Odličan izbor za sve koji traže fleksibilnost i sigurnost

• Mogućnost korištenja dijelova frameworka kao zasebnih komponenti je veliki plus

• Još uvijek nisam požalio

Spring

• de facto Java standard za razvoj (i web) aplikacija

• enterprise grade što zapravo znači best-practices

Pitanja publike