HTML 5, ASP.NET MVC & Windows Azure sessie voor Ivo BruggePureplexity
Deze presentatie werd gegeven bij de sessie die we gaven voor de 2de en 3de jaars studenten van het graduaat informatica aan het IVO te Brugge. In deze presentatie behandelden we 3 grote onderwerpen: HTML 5, ASP.NET MVC en Windows Azure.
HTML 5, ASP.NET MVC & Windows Azure sessie voor Ivo BruggePureplexity
Deze presentatie werd gegeven bij de sessie die we gaven voor de 2de en 3de jaars studenten van het graduaat informatica aan het IVO te Brugge. In deze presentatie behandelden we 3 grote onderwerpen: HTML 5, ASP.NET MVC en Windows Azure.
Flex wordt steeds populairder onder java developers. In de praktijk komen dezelfde vragen steeds naar boven drijven. Vragen als: Hoe maak je grote enterprise applicaties in flex? Welke opensource mvc en ioc flex frameworks heb je nodig? Wat zijn de best practices en valkuilen die je tegenkomt? In deze sessie zullen deze vragen worden besproken om een beter beeld te geven over flex in de praktijk in de wereld van de java developer.
Maak je eigen template en weet daardoor precies wat voor toeters en bellen erin zitten. Er zijn genoeg projecten waarbij het aanbieden van een standaard template of aangekocht template niet meer voldoende is, maar waarbij je aan de slag mag met een aangeleverd design.
In deze presentatie deelt Hans Kuijpers een aantal best practices die hij zelf ook toepast bij het maken van Joomla! templates. Met een paar praktijkvoorbeelden en tips, zodat je direct zelf aan de slag kunt gaan met de nieuwe template van je eigen website.
A presentation (in Dutch) on using Durandal for SPAs. This was a presentation given for an internal meeting at Team4Talent (http://www.team4talent.be). There is a demo app to go along with it at https://github.com/petermorlion/DurandalDemo. The notes with each slide sometimes refer to this demo app.
Docker is used at MoneyBird to manage development environments for software engineers, prevent issues with dependencies, and maintain traceability of dependencies. MoneyBird started using Docker in 2013 for development environments, 2014 for staging, and 2015 for production on AWS. Images are based on Ubuntu and include build essentials, PostgreSQL client, locale settings, and SSH keys. Images are tagged with the Ruby version, image version, and git SHA. Dockerfiles are kept in a central git repository and each project has a Dockerfile. Continuous integration uses Buildkite to build and test images from git pushes. Development uses Vagrant and Docker for quick local development while production simply pulls and runs predefined images on EC2 instances.
Flex wordt steeds populairder onder java developers. In de praktijk komen dezelfde vragen steeds naar boven drijven. Vragen als: Hoe maak je grote enterprise applicaties in flex? Welke opensource mvc en ioc flex frameworks heb je nodig? Wat zijn de best practices en valkuilen die je tegenkomt? In deze sessie zullen deze vragen worden besproken om een beter beeld te geven over flex in de praktijk in de wereld van de java developer.
Maak je eigen template en weet daardoor precies wat voor toeters en bellen erin zitten. Er zijn genoeg projecten waarbij het aanbieden van een standaard template of aangekocht template niet meer voldoende is, maar waarbij je aan de slag mag met een aangeleverd design.
In deze presentatie deelt Hans Kuijpers een aantal best practices die hij zelf ook toepast bij het maken van Joomla! templates. Met een paar praktijkvoorbeelden en tips, zodat je direct zelf aan de slag kunt gaan met de nieuwe template van je eigen website.
A presentation (in Dutch) on using Durandal for SPAs. This was a presentation given for an internal meeting at Team4Talent (http://www.team4talent.be). There is a demo app to go along with it at https://github.com/petermorlion/DurandalDemo. The notes with each slide sometimes refer to this demo app.
Similar to Object Oriented Programming for web applications (20)
Docker is used at MoneyBird to manage development environments for software engineers, prevent issues with dependencies, and maintain traceability of dependencies. MoneyBird started using Docker in 2013 for development environments, 2014 for staging, and 2015 for production on AWS. Images are based on Ubuntu and include build essentials, PostgreSQL client, locale settings, and SSH keys. Images are tagged with the Ruby version, image version, and git SHA. Dockerfiles are kept in a central git repository and each project has a Dockerfile. Continuous integration uses Buildkite to build and test images from git pushes. Development uses Vagrant and Docker for quick local development while production simply pulls and runs predefined images on EC2 instances.
The document discusses advanced testing techniques, including:
1. The speaker shares experiences with testing and encourages thinking critically about testing like an advanced tester. Unit testing with RSpec and integration testing with Cucumber are covered.
2. Examples of unit testing, boundary value analysis, isolation, mocks/stubs, and fixtures are provided. The benefits of testing, such as isolating units of code and finding edge cases, are discussed.
3. Integration testing with Cucumber is recommended to test the full stack of models, views, and controllers in a behavior-driven manner. An example Cucumber scenario tests account creation on a homepage.
Via MoneyBird kunnen ondernemers eenvoudig online facturen maken en versturen. Waarom verdient MoneyBird een Gouden Factuur 2009? Bekijk de presentatie!
2. • Waarom OOP?
• Basis uitleg over OOP
• Design Patterns
• ActiveRecord
• Model View Controller
• Extra informatie
• Vragen
3. OOP
• Object Oriented Programming
• Alle code in classes
• Classes hebben verantwoordelijkheden
• Verantwoordelijkheden staan in het contract
• Classes kunnen een Design Pattern vormen
• PHP5 heeft een goede ondersteuning voor OOP
4. Waarom OOP?
• Structuur in je code
• Herbruikbaarheid
• Leesbaarheid
• Sneller kunnen ontwikkelen
• Design patterns
• Communicatie met collega’s
5. Maar ook in webapplicaties??
Ja, want:
• die hebben ook recht op structuur,
• PHP laat je altijd alles opnieuw doen,
• er zijn goede design patterns voor.
Waarschuwing:
• OOP != procedurele code in classes gooien
• OOP == een denkwijze
6. 1. Waarom OOP?
2. Basis uitleg over OOP
3. Design Patterns
4. ActiveRecord
5. Model View Controller
6. Extra informatie
7. Vragen
7. Classes
Class is een definitie van functionaliteit door middel van:
• Eigenschappen: $bLustBier
• Queries: getNaam()
• Commando’s: setSchoenMaat($iSize)
Eigenschappen zijn de ‘oude’ variabelen. Queries en commando’s zijn de
‘oude’ functies, in OOP context vaak methoden genoemd.
8. <?php
class Persoon {
private $sNaam;
public function __construct($sNaam){
$this->sNaam = $sNaam;
}
public function getNaam(){
return $this->sNaam;
}
}
class PHPFreak extends Persoon {
private $bLustBier;
private $iSchoenMaat;
public function __construct($sNaam){
parent::__construct($sNaam);
$this->bLustBier = true;
}
public function setSchoenMaat($iSize){
if($iSize < 45){
throw new Exception(quot;Dit kan geen PHPFreak zijn!quot;);
}
$this->iSchoenMaat = $iSize;
}
}
?>
9. Overerving
• Door middel van overerving kan je in een overervende class gebruik
maken van de functionaliteit van de basis class.
• In veel gevallen een generalisatie van een class:
Persoon > PHPFreak
Controller > HomeController
• Je specificeert extra eigenschappen en functionaliteit die alleen voor die
generalisatie gelden (en dus niet voor de basis klasse)
10. <?php
class Persoon {
private $sNaam;
public function __construct($sNaam){
$this->sNaam = $sNaam;
}
public function getNaam(){
return $this->sNaam;
}
}
class PHPFreak extends Persoon {
private $bLustBier;
private $iSchoenMaat;
public function __construct($sNaam){
parent::__construct($sNaam);
$this->bLustBier = true;
}
// ...
public function setSchoenMaat($iSize){
// ...
$this->iSchoenMaat = $iSize;
}
}
?>
11. Design by Contract
• Classen geven een contract: “als jij mij zo gebruikt, dan zal ik dit voor je
regelen”
• Via de commentaar-regels kan je zien wat het contract van een class of
methode is.
• Een class kan exceptions gooien als jij je niet aan het contract houdt.
• Eigenschappen vaak private om contract te kunnen uitvoeren.
12. <?php
class PHPFreak extends Persoon {
private $iSchoenMaat;
// ...
/**
* @desc Verander de schoenmaat
* @param $iSize integer
*/
public function setSchoenMaat($iSize){
if(!is_numeric($iSize)){
throw new Exception(quot;Dit is geen getalquot;);
}
if($iSize < 45){
throw new Exception(quot;Dit kan geen PHPFreak zijn!quot;);
}
$this->iSchoenMaat = $iSize;
}
}
?>
13. Objecten
• Objecten zijn instanties van een class,
• Op een object kan je de bewerkingen uitvoeren die een class biedt,
• Aan een object kan je eigenschappen vragen.
15. Class methods
class Person {
public static function find($sName){
return new Person($sName);
}
}
$oPerson = Person::find(“Pietje”);
• Als je op een object een methode aanroept, roep je een instantie methode
aan: $oPerson->setName(“Pietje”);
• Je kunt ook statische methoden aanroepen: Person::find(“Klaas”);
• Een statische methode voert iets op class niveau uit en heeft dus geen
toegang tot eigenschappen van een object.
16. 1. Waarom OOP?
2. Basis uitleg over OOP
3. Design Patterns
4. ActiveRecord
5. Model View Controller
6. Extra informatie
7. Vragen
17. Design Patterns
Een verzameling van klassen,
• met een bepaalde onderlinge structuur,
• die een oplossing bieden voor veel voorkomende software problemen.
Voorbeelden:
• Singleton
• ActiveRecord
• Model,View en Controller (MVC)
18. 1. Waarom OOP?
2. Basis uitleg over OOP
3. Design Patterns
4. ActiveRecord
5. Model View Controller
6. Extra informatie
7. Vragen
19. ActiveRecord
ActiveRecord vormt een laag op een database en versimpelt het
gebruik van een database. SQL queries zijn bijvoorbeeld nauwelijks nog
nodig.
Voorbeeld contract van class ActiveRecord:
• find($iID) geeft de rij met het gegeven id terug
• findAll($aConditions = null, $iLimit = null, $iOffset = null) geeft 1 of
meer rijen terug die voldoen aan de gegeven condities.
20. Voorbeeld
<?php
require quot;ActiveRecord.phpquot;;
class User extends ActiveRecord {
}
// SELECT * FROM user WHERE status > 5 LIMIT 10
User::findAll(array(quot;status > ?quot;, 5), 10)
// SELECT * FROM user WHERE id=1
$oUser = User::find(1);
$oUser->name = quot;Pietjequot;;
// UPDATE user SET name = quot;Pietjequot; WHERE id=1
$oUser->save();
?>
21. ActiveRecord
• ActiveRecord is te vinden in het CakePHP framework
• Een variant op het ActiveRecord pattern is ook te vinden in het Zend
Framework
22. 1. Waarom OOP?
2. Basis uitleg over OOP
3. Design Patterns
4. ActiveRecord
5. Model View Controller
6. Extra informatie
7. Vragen
23. MVC
Het model, view en controller pattern is zeer goed toepasbaar binnen
webapplicaties. Je maakt in je code een splitsing tussen:
• Model: je database; bijvoorbeeld een ActiveRecord pattern
• View: je templates; bijvoorbeeld Smarty
• Controller: het afhandelen van verzoeken van een client en het
samenvoegen van het model en de view.
24. Zonder OOP
Sommige zaken doe je dubbel als je meer acties krijgt:
• Vertalen van een URL naar een aantal handelingen in PHP
• Foutafhandeling bij missende parameters
• Foutafhandeling bij SQL queries
• SQL queries
Sommige zaken zijn onoverzichtelijk:
• HTML tussen je PHP code
• Scheiding tussen de verschillende acties
25. Voorbeeld zonder OOP
<?php
if(isset($_GET['action']) && $_GET['action'] == quot;showquot;){
if(!isset($_GET['id']) || !is_numeric($_GET['id'])){
exit(quot;Kan geen gebruiker ophalen zonder idquot;);
}
$rResult = mysql_query(quot;SELECT *
FROM users
WHERE id = quot;.intval($_GET['id']));
if(!$rResult){
exit(quot;Er ging iets fout: quot;.mysql_error());
}
$oUser = mysql_fetch_assoc($rResult);
echo quot;<h1>quot;.$oUser['name'].quot;</h1>quot;;
echo quot;<p>quot;.$oUser['email'].quot;</p>quot;;
}
?>
26. Voorbeeld met OOP
// User.php
<?php
class User extends ActiveRecord {
}
?>
// UserController.php
<?php
class UserController extends ApplicationController {
public function indexAction(){
$oUser = User::find($this->params['id']);
$this->user = $oUser;
}
}
?>
// index.phtml
<h1><?= $this->user['name'] ?></h1>
<p><?= $this->user['email'] ?><p>
27. Model
De verantwoordelijkheden van het model zijn:
• Een abstractie bieden van de database
• Automatische controle op parameters
• SQL injection tegengaan
View
De verantwoordelijkheden van de view zijn:
• HTML weergave mogelijk maken
• Variabelen beschikbaar maken die toegekend zijn in de controller
28. Controller
De verantwoordelijkheden van de controller zijn:
• De URL omschrijven naar een aanroep van een bepaalde methode
• Parameters controleren en beschikbaar maken in een instantie variabele
• Variabelen declareren voor de view
De opbouw van een URL is bijvoorbeeld: /user/show/5 De basis class
ApplicationController zal dit omschrijven naar een aanroep van de
methode showAction in de class UserController.
29. Applicatie structuur
• De mappen structuur van een MVC applicatie zal er bijvoorbeeld zo uit zien:
30. 1. Waarom OOP?
2. Basis uitleg over OOP
3. Design Patterns
4. ActiveRecord
5. Model View Controller
6. Extra informatie
7. Vragen
31. Frameworks
De volgende frameworks zijn volledig OOP gebaseerd en kunnen je helpen
bij je eerste stappen in OOP land:
• Zend Framework (helaas nog steeds alpha status)
• CakePHP
• Symfony
• CodeIgniter
32. Losse classes
Op internet zwerven veel losse classes die je onderdeel van je code kan
maken, enkele bekende:
• PHPMailer: e-mail versturen via PHP
• FormHandler: snel formulieren genereren en afhandelen
• FPDF: PDF documenten genereren
• Smarty: template engine
Op phpclasses.org zijn veel classes te vinden
34. Object Oriented Code is like sex.
More people talk about it than are actually doing it.
The few who are doing it are: doing it poorly (sure it will
be better next time) and not practicing it safely.
35. 1. Waarom OOP?
2. Basis uitleg over OOP
3. Design Patterns
4. ActiveRecord
5. Model View Controller
6. Extra informatie
7. Vragen