Rafał Wesołowski CLEAN CODE

Ähnliche Dokumente
Einführung in Javadoc

Javadoc. Programmiermethodik. Eva Zangerle Universität Innsbruck

PHP Code Konventionen Um einen einheitlichen Code zu generieren, der von jedem gelesen werden kann, müssen folgende Konventionen eingehalten werden.

Programmieren I. Strategie zum Entwurf von Klassen. Beispiele. Design von Klassen. Dr. Klaus Höppner. Beispiel: Bibliothek

Programmieren von Webinformationssystemen

WEBAPPLIKATIONEN MIT PHP. Wo gibt es Hilfe? Wie fang ich an?

Programmieren von Webinformationssystemen

BillSAFE Modul JTL Shop ab V.3.17 und JTL Warenwirtschaft ab V

BillSAFE Modul für oscommerce 2.3.1

FensterHai. - Integration von eigenen Modulen -

Skrill Integra-on bei Kontakt

BillSAFE Modul für xt:commerce 4 ab Version

BillSAFE Modul für xt:commerce 4 ab Version

Webshop Tutorial. E-Commerce ECM ERP SFA EDI. Backup. Integration des Comarch Webshops mit Facebook.

Applets Belebung von Webseiten. Dipl.-Ing. Wolfgang Beer

Java Einführung Abstrakte Klassen und Interfaces

TYPO3 Commerce Extension

Festlegungen für die Code Entwicklung Table of contents

Christian Arndt geb. Schräder

PayPal Update v1.0.1 Erstellt am von Michael Schwiedop, Gambio GmbH

BillSAFE Modul für Magento CE 1.4.x, PE 1.9.x und EE 1.9.x

Martin Schütte. 6. Brandenburger Linux-Infotag 21. November 2009

BillSAFE Modul für xt:commerce Veyton ab Version

Versandart verbieten pro Produkt bearbeiten Sie beim Produkt Zahlungsarten verbieten pro Produkt bearbeiten Sie beim Produkt

Manual WordPress - ContentManagementSystem

BillSAFE Modul für Modified ecommerce

Einführung in OO PHP. Jan Burkl Solution Consultant Zend Technologies. All rights reserved. Zend Technologies, Inc.

Objektorientierung: Klassen und Objekte

Jürgen Bayer. XML- und HTML-Dokumentation mit C#

Installation. Magento Heidelpay CD-Edition. Magento ab 1.8.x. The complete solution for Ecommerce. Date: Version: 1.2

DataTables LDAP Service usage Guide

BillSAFE Modul für oscommerce 2.3.1

Abteilung Informatik, JFC/Swing 2004 Diego Schmidlin V2.2

Dokumentation für Popup (lightbox)

Übersicht. Informatik 2 Teil 3 Anwendungsbeispiel für objektorientierte Programmierung

DHL POSTPAY OXID Plug-In. Nutzerdokumentation. Modul Version: 0.9. Shopversion: OXID 4.7.x/5.0.x

Neue Features in C# 2.0

Extending tl_member. Andreas Fieger

Dokumentation Shopsystem

Jetzt sollt ihr von der Vorlage der Grundversion 1.0 ein eigenes Textadventure erstellen.

1. Grundzüge der Objektorientierung 2. Methoden, Unterprogramme und Parameter 3. Datenabstraktion 4. Konstruktoren 5. Vordefinierte Klassen

BillSAFE Modul für OXID x

Java-Schulung Grundlagen

Installationsanleitung für CAO-FAKTURA Connector.

Dokumentation DHL POSTPAY Payment Extension

Institut für Programmierung und Reaktive Systeme 26. April Programmieren II. 10. Übungsblatt

Web-Anwendungsentwicklung mit dem Delivery Server

SimpleOOP Opensource OOP Plugin

Praktische Übung 'JUnit-Test'

Übungen zur Android Entwicklung

Erreichbarkeit von Klassenelementen. Daten verstecken und kapseln

Java: Vererbung. Teil 3: super()

PIWIN 1 Übung Blatt 5

Bitte führen Sie die Installation in der hier beschriebene Reihenfolge aus!

creditpass Bonitätsprüfung für xt:commerce veyton

Algorithmen und Datenstrukturen

Integration von KS-Hostmonitor in itop

VideoPlus. Shopware Video-Plugin. Handbuch

Groovy für Fortgeschrittene

Studentische Lösung zum Übungsblatt Nr. 7

JTL PayPal-Plugin. PayPal Express und PayPal PLUS in Ihrem JTL-Shop 4. Plugin-Version 1.03 Plugin-Dokumentation vom

Mac OS X Consoliero Teil 14: Webmail Agent unter Mac OS X Server 10.2

Autoresponder Unlimited 2.0

1 Funktionsumfang. 1.1 Vorteile auf einen Blick

Praktikum Informatik II Prof. Dr. Martin Trauth, Dr. Michael Männel


SPARES 5.0. App zur Recherche von Sirona Ersatzteilen Gebrauchsanweisung für Android Mobilgeräte. Stand: Dezember 2015

Zend Framework MVC Applikationen testen

CMS für Kleingartenvereine Version Andreas Sabisch Deverlopment

Erstellen eines HTML-Templates mit externer CSS-Datei

Tipps, Struktur und Fragen

5. Tutorium zu Programmieren

Prüfung Software Engineering II (IB)

Nathan Burgener. Design by Contract. Modul SWE

XML Kurs LRZ 1

Extensions mit TYPO3 TYPO3

Übung 1 mit C# 6.0 MATTHIAS RONCORONI

mehr funktionen, mehr e-commerce:

<body> <h1>testseite für HTML-Parameter-Übergabe<br>50 Parameter werden übergeben</h1>

Objektorientierte Programmierung

Software Engineering II

Selbststudium OOP Programmieren 1 - H1103 Felix Rohrer

Übung 1: Von einer naiven JavaScript Applikation zu einem modernen Front-End Build:

HiOPC Hirschmann Netzmanagement. Anforderungsformular für eine Lizenz. Order form for a license

C++ Kurs Teil 1. Architektur, Anwendungsspektrum, primitive Datentypen, Funktionsaufrufe, Referenzen, Klassen

Titel SCSM 2012 VORFALL (INCIDENT) BENACHRICHTIGUNG NACH 30 MINUTEN OHNE ZUWEISUNG

Open Catalog Interface (OCI) Anbindung an VirtueMart

Software Engineering II

Einführung in die Cross-Plattform Entwicklung Web Services mit dem Intel XDK

Individuelle Erweiterung des generierten Codes. 16. Januar 2013

5.4 Klassen und Objekte

Transkript:

Rafał Wesołowski CLEAN CODE

Rafał Wesołowski Beruf: - ecommerce Software Engineer bei der Internetagentur NEXUS Netsoft GmbH - Ausbilder - PHP und JS Experte - Agile Design Pattern Enthusiast - Innovations Fan Privat: - Vater und Ehemann - Kampfsportler - Mehrfacher Polen-Meister im Ju-Jitsu

1 Der Fehler-Eisberg 2 1. Shop offline 3 2. Checkout / Artikel zum Warenkorb hinzufügen 4 3. Fehler bei Slider, Direktbestellung, Bannermodul usw. 5 4. Modul / Plugin funktioniert nicht wie gewünscht 5. PHP Warning / Notice

Applikation :Theorie / Praxis Quelle: https://twitter.com/philwinkle/status/688441014160355328

Applikation :Theorie / Praxis Quelle: https://twitter.com/philwinkle/status/688441014160355328

Code: Lesen / Schreiben Wie viele Stunden pro Tag?

Keep It Simple Stupid

space pen

128,89 $ space pen

space pen und Bleistift 128,89 $ 0,24

/index.php?lang=1=9%3b(function()%7bqxss%7d)%3b%2f%2f Cross-Site-Scripting

Cross-Site-Scripting /index.php?lang=1=9%3b(function()%7bqxss%7d)%3b%2f%2f index.php:2 $_GET['lang'] = (int)$_get['lang'];

Strukturiertes entwickeln Beispiel: PayPal-Zahlungsart

PayPal-Zahlungsart #1: Warenkorb #2: Zahlungsart #3: Zusammenfassung #4: PayPal #5: Danke-Seite

Warenkorb Zahlungsart Zusammenfassung Pay-Pal Danke-Seite PayPal-Zahlungsart

PayPal-Zahlungsart Warenkorb Zahlungsart Zusammenfassung Pay-Pal Danke-Seite Warenkorb Zahlungsart Zusammenfassung Pay-Pal Abbrechen-Button Zahlungsart Warenkorb Zahlungsart Zusammenfassung Pay-Pal Fehler in PayPal Zahlungsart Warenkorb Zahlungsart Zusammenfassung Pay-Pal zurück Button Zusammenfassung Warenkorb Zahlungsart Zusammenfassung Pay-Pal zurück zum Shop Warenkorbänderung

PayPal-Zahlungsart Warenkorb Zahlungsart Zusammenfassung Pay-Pal Danke-Seite Warenkorb Zahlungsart Zusammenfassung Pay-Pal Abbrechen-Button Zahlungsart Warenkorb Zahlungsart Zusammenfassung Pay-Pal Fehler in PayPal Zahlungsart Warenkorb Zahlungsart Zusammenfassung Pay-Pal zurück Button Zusammenfassung Warenkorb Zahlungsart Zusammenfassung Pay-Pal zurück zum Shop Warenkorbänderung Warenkorb Zahlungsart Zusammenfassung Pay-Pal Status: pending Danke-Seite Warenkorb Zahlungsart Zusammenfassung Pay-Pal bezahlt Keine Danke-Seite

Namenskonvention Der Clean-Code

Schlechte Bezeichnung <?php class Info { public function get() { $c = $this->getcontent(); $di = []; foreach ($c as $i) { if ($i->modus == 2) { //ist Rabatt? $di[] = $i; } } } } return $di;

Gute Bezeichnung <?php class BasketContent { public function getdiscountproductsfrombasket() { $basketitems = $this->getbasketcontent(); $discountitems = []; foreach ($basketitems as $item) { if ($item->isvoucher()) { $discountitems[] = $item; } } } } return $discountitems;

Codestruktur Klassen/Methoden Klassen Methoden nur eine Aufgabe erfüllen wenige Methoden wenige Abhängigkeiten nur eine Aufgabe erfüllen wenige Arguments wenige Verschachtelungen

Schlechte Codestruktur https://github.com/shopware/shopware/blob/5.1/engine/shopware/core/sorder.php#l513

Gute Codestruktur <?php class SaveOrder { public function construct( Order $order ) { //... } public function save() { //... } private function payment() {} private function billingaddress() {} private function shippingaddress() {} private function orderarticles() {} private function sendmail() {} } //...

Codestruktur <?php class Foo { public $one; private $two; private $three; Class Public Eigenschaften Private / Protected Eigenschaften construct Public Methoden Private / Protected Methoden public function construct() {} public function funone() {} public function funtwo() {} private function funthree() {} } private function funfour() {}

Kommentare

/** * Prüft ob die Email existiert * * @author Max Müller <max@müller.de> * @param string $email Email- Adresse * @return boolean */ protected function checkemailexists( $email ); Unnötige Kommentare

Unnötige Kommentare /** * Funktion erstellt eigene Thumbs * * $index kann eine Nummer vom Bild sein (see elseif (is_numeric($index))) * oder kann eine URL sein: ("http://www.page.com/out/master/startslider/img.jpg" * oder "startslider/img/img.jpg" * * Wichtig! Wenn $index eine URL ist, bitte zwei Ordner erstellen (CHMOD 777): * - /out/master/{deinordner}/{deinordner2}/ (<- Dein Master Bilder z.b /out/master/startslider/img/) * - /out/generated/{deinordner}/{deinordner2}/ (<- Thumbs generieren z.b /out/generated/startslider/img/) * * @param int string $index Bildnummer oder Bild-Url * @param int $width Breite * @param int $height Höhe * @param string $configsize Größe aus dem Admin Backend (Themes->Einstell.->Bilder). * * @return string */ public function getcustomthumbnailurl($index = 1, $width = null, $height = null, $configsize = null)

Richtig kommentieren Klassen-Kommentare hinzufügen Methoden haben immer @param und @return als Kommentare Methoden Kommentare nur verwenden wenn dies nötig ist! Inline Kommentare vermeiden

Clean Code Code Review Verwendung des PSR-Standards CodeSniffer / Mess Detector / Copy Paste Detector Boy Scout Rule Unit-Test / Integration-Test

Tools Scrutinizer SensioLabsInsight Code Climate codacy

Clean Code ist ein Weg, kein Ziel

Rafał Wesołowski DANKESCHÖN