3. Object Oriented Design

Total Page:16

File Type:pdf, Size:1020Kb

3. Object Oriented Design Copyright ⃝c 2016 Qafoo GmbH Published by Qafoo GmbH Version 1.1.1; Published December 15, 2016 https://qafoo:com/ | <contact@qafoo:com> Contents 1 Introduction 1.1 About This Book 9 1.2 About Qafoo 10 1.3 The Authors 11 1.3.1 Kore Nordmann . 11 1.3.2 Tobias Schlitt . 11 1.3.3 Bejamin Eberlei . 12 1.3.4 Manuel Pichler . 12 2 Clean Code 2.1 Developers Life is a Trade-Off 13 2.1.1 The NoSQL Dilemma . 13 2.1.2 Overengineered State Machines . 14 2.1.3 Hack Hack Hack . 15 2.1.4 Bottom Line . 16 2.2 Never Use null 17 2.2.1 What it is Used For . 17 2.2.2 null as Return Value . 19 ⃝c Qafoo GmbH 2010 - 2016 2.2.3 Summary . 20 2.3 Struct classes in PHP 21 2.3.1 Implementation. 22 2.3.2 Copy on write . 24 2.3.3 Summary . 25 3 Object Oriented Design 3.1 Learn OOD - to unlearn it again 27 3.1.1 Learning OOD the classical way . 27 3.1.2 OOD in fast pace and agile . 28 3.1.3 Refactoring is the key . 29 3.1.4 Learning OOD to unlearn it . 29 3.1.5 Conclusion / TL;DR. 31 3.2 Object lifecycle control 32 3.2.1 Why is this bad? . 32 3.2.2 How can I solve this? . 33 3.2.3 Conclusion . 34 3.3 Ducks Do Not Type 35 3.3.1 Duck Typing . 36 3.3.2 Prototyping. 36 3.3.3 Using Foreign Code . 37 3.3.4 Package Visibility . 38 3.3.5 Conclusion . 38 3.4 Abstract Classes vs. Interfaces 39 3.4.1 Definitions . 39 3.4.2 Classes are Types. 39 3.4.3 interface . 40 3.4.4 Telling Apart . 41 3.4.5 Examples & Hints . 42 3.4.6 tl;dr . 43 3.5 ContainerAware Considered Harmful 44 3.5.1 Background . 44 3.5.2 Issues . 44 3.5.3 Conclusion . 47 3.6 Code Reuse By Inheritance 48 3.6.1 Inheritance . 48 3.6.2 Active Record . 48 3.6.3 A Smaller Example . 49 3.6.4 The Helper Method . 51 3.6.5 Testing Private Methods . 51 3.6.6 Depth Of Inheritance Tree (DIT) . 52 3.6.7 Summary . 52 3.7 Utilize Dynamic Dispatch 53 3.8 When to Abstract? 58 3.8.1 Summary . 60 4 Testing 4.1 Finding the right Test-Mix 61 4.1.1 The Test-Mix Tradeoff . 63 4.1.2 Conclusion . 64 4.2 Practical PHPUnit: Testing XML generation 65 4.2.1 Test case basics . 68 4.2.2 The naive way . 69 4.2.3 The lazy way . 71 4.2.4 Selecting with CSS . 71 4.2.5 Tag match assertions . 75 4.2.6 Using XPath . 77 4.2.7 Conclusion . 81 4.3 Testing file uploads with PHP 82 4.4 Mocking with Phake 88 4.4.1 Test Doubles Explained . 88 4.4.2 Benefits of Test Doubles . 88 4.4.3 Introduction to Phake . 89 4.4.4 Conclusion . 91 4.5 Testing Effects of Commands With Phake::capture() 92 4.6 Using Mink in PHPUnit 94 4.7 Introduction To Page Objects 97 4.7.1 Groundwork . 97 4.7.2 A First Test . 98 4.7.3 Refactoring The Frontend . 100 4.7.4 Problems With Page Objects . 102 4.7.5 Conclusion . 102 4.8 Database Tests With PHPUnit 103 4.8.1 Removing Data versus Schema Reset . 103 4.8.2 Point of Data Reset . 104 4.8.3 Mocking the Database Away . 106 4.8.4 Conclusion . 106 4.9 Database Fixture Setup in PHPUnit 107 4.9.1 Dump & Insert Live Data . 107 4.9.2 Base Data . 108 4.9.3 Test Data . ..
Recommended publications
  • Resin 3.2 Reference
    Contents 1 Overview 3 1.1 Features - Resin and Resin Professional . .3 2 Installation 11 2.1 Resin Installation Quick Start . 11 2.2 Resin Installation . 16 2.3 Resin Web Server . 16 2.4 Resin with Apache . 22 2.5 Resin with IIS . 34 2.6 How the Plugins Dispatch to Resin . 44 3 Command-Line 47 3.1 Command-Line Configuration . 47 4 Admin Guide 51 4.1 User Guide: Administration . 51 5 Watchdog 63 5.1 Resin Watchdog . 63 6 Virtual Hosts 73 6.1 Virtual Hosting . 73 7 Clustering 89 7.1 Resin Clustering . 89 8 Web Applications 109 8.1 An Overview of Web Applications . 109 9 Logging 137 9.1 Log . 137 10 Administration 163 10.1 Resin Administration . 163 1 CONTENTS 11 Deployment 177 11.1 Packaging/Deployment . 177 12 Proxy Caching 181 12.1 Server Caching . 181 13 Quercus 193 13.1 Quercus: PHP in Java . 193 14 Security 217 14.1 Resin Security . 217 15 Inversion of Control 271 15.1 Resin IoC . 271 15.2 Scheduled Task . 308 16 Amber 327 16.1 Amber . 327 17 Embedding Resin 355 17.1 Embedding Resin . 355 18 Filters 367 18.1 Filters . 367 19 BAM 379 19.1 BAM . 379 20 Comet 405 20.1 Comet/Server-Push Servlet . 405 21 Remoting 411 21.1 Resin Remoting . 411 21.2 Hessian . 417 22 Messaging 423 22.1 Resin Messaging . 423 23 JSF - Java Server Faces 435 23.1 JSF - Java Server Faces . 435 24 Configuration Tags 445 24.1 cluster: Cluster tag configuration .
    [Show full text]
  • Codeigniter-Testing-Guide-Sample.Pdf
    CodeIgniter Testing Guide Beginners’ Guide to Automated Testing in PHP. Kenji Suzuki and Mat Whitney This book is for sale at http://leanpub.com/codeigniter-testing-guide This version was published on 2016-01-23 This is a Leanpub book. Leanpub empowers authors and publishers with the Lean Publishing process. Lean Publishing is the act of publishing an in-progress ebook using lightweight tools and many iterations to get reader feedback, pivot until you have the right book and build traction once you do. © 2015 - 2016 Kenji Suzuki and Mat Whitney Tweet This Book! Please help Kenji Suzuki and Mat Whitney by spreading the word about this book on Twitter! The suggested hashtag for this book is #CITestGuide. Find out what other people are saying about the book by clicking on this link to search for this hashtag on Twitter: https://twitter.com/search?q=#CITestGuide Contents Preface ............................................... i The Book at a Glance ..................................... i What You Need for This Book ................................. iii Who should read This Book? ................................. iii Why PHPUnit? ........................................ iv Is This a CodeIgniter Book? .................................. iv Is Testing PHP Applications Difficult? ............................ iv Is Testing CodeIgniter Applications Difficult? .................... v Testing is Fun and Easy ................................ v Conventions Used in This Book ................................ v Errata .............................................
    [Show full text]
  • I Don T Handle Protocol Git Clone Https
    I Don T Handle Protocol Git Clone Https Ne'er-do-well Rollins curtails or show-card some herbarium invectively, however combinative Tremain sibilate vernacularly or exposing. Neogene and defrayable Noach skiatron some Nepal so labially! Niall still dribble centripetally while earless Urbano tack that self-praise. Ie i clone feature branch to the central master and send anything related to the book No idiot that possibility of. You git protocol to gits fault of http server certificate to! Please use git clone name to handle merges that http revision for software stack overflow for most time? Security and cloning is. The issues I authorize are declare just reset and pull. Tight coupling of git protocol improvements to handle extremely picky and cloning the difference: understanding the internet line option only get help! Called at night after the origin had a mechanism when someone to the turnover rate of something that many contributors. Each breast should highlight a living purpose you should completely implement general purpose. DVCS _is_ a similar system update a VCS due procedure the Distributed features. It clasp the exact same error. Because Git documentation tends to focus entirely on the relationship between actually working directory but your local repository. No, I start not associated with the product in mind way. There are now world metrics that scholarship be applied to vehicle how useable a particular interface is. This batter be concern if those use although other fund the windows explorer or home you get problems with the context menu displaying incorrectly. Open source developer who created because git protocol you to handle those like best practices that http proxy by cloning from the https can be handled that? Collaboration in git protocol.
    [Show full text]
  • Sovremenny PHP.Pdf
    Modern РНР New eaturesF and Good Practices Josh Lockhart Beijing • Cambridge • Farnham • Kбln • Sebastopol • Tokyo O'REILLY" Современный РНР Новые возможности и передовой опыт Джош Локхарт Москва, 2016 УДК 004. 738.5:004.438РНР ББК 32.973.4 Л73 Л73 Джош Локхарт Современный РНР. Новые возможности и передовой оныт / пер. с англ. Рагимов Р. Н - М.: ДМК Пресс, 2016 . - 304 с.: ил. ISBN 978-5-97060-184-6 Из книги вы узнаете, как РНР превратился в зрелый пол1юфу11кци­ ональный объектно-ориентированный язык, с пространствами имен и постоянно растущей коллекцией библиотек компонентов. Автор демонстрирует новые возможности языка на практике. Вы узнаете о передовых методах проектирования и конструирования приложений, работы с базами данных, обеспечения безопасности, тестирования, от­ ладки и развертьшания. Если вы уже знакомы с языком РНР и желаете расширить свои з11а- 1шя о нем, то эта книга для вас! УДК 004.738.5:004.438РНР ББК 32.973.4 Original Ei1glisl1 language edition puЬlisl1ed Ьу O'Reilly Media, Iпс., 1005 Gravenstein Нighway North, SeЬastopol, СА 95472. Copyright © 2015 O'Reilly Metlia, Inc. Russiaп-laпguage editioп copyright © 2015 Ьу DMK Press. All rights reserved. Все права защищеflЫ. Любая часть этой книги не может быть воспроиз­ ведена в какой бы то ни было форме и какими бы то ни было средствами без nнсьмеююrо разрешения владельцев авторских прав. Материал, изложенный в данной кннrе, м1юrокрапю проверен. Но, по­ скольку вероятность технических ошибок осе рао1ю существует, издательство не может rара1пировать абсолютную точность и правильность приводимых соеде1шй. В связи с этим издательство не несет ответственности за возможные ошибки, связанные с использованием книги. ISBN 978-1-49190-501-2 (анrл.) Copyright © 2015Josh Lockhart ISBN 978-5-97060-184-6 (рус.) © Оформление, перевод на русский язык, ДМК Пресс, 2016 Лорел посвящается ----"···· ОrЯАВЯЕНИЕ Об авторе .......................................................
    [Show full text]
  • State of Microservices 2020 Authors Table of Patryk Mamczur Editor in Chief
    THE NEW STANDARD FOR BUILDING SCALABLE SOFTWARE? State of Microservices 2020 Authors _Table of Patryk Mamczur Editor in Chief Tomasz Czechowski contents Mateusz Mól Mariusz Nowak Design of online version Design of print version Developers 01 669 microservice experts from around the world 06 Maturity 02 Great architecture for solving scalability issues 12 Programming languages 03 JavaScript and TypeScripts rule all 20 Deployment and serverless 04 Microservice developers choose AWS 26 Repositories 05 Monorepo or multirepo? 32 Experts Varia Marek Gajda Adam Polak CTO of The Software House Head of Node.js Team 06 Communication, authorisation, message brokers 38 at The Software House Yan Cui Peter Cooper Continuous integration Host of Real World The Founder of Cooperpress 07 Microservices + CI = <3 42 Serverless Podcast Ewelina Wilkosz Thomas Boltze Debugging IT Consultant at Praqma CTO of Asto Digital 08 Are logs enough for your project? 48 Sarup Banskota Luca Mezzalira Head of Growth at ZEIT VP of Architecture at DAZN Consumption of APIs 09 Is static the future? 54 Richard Rodger CEO of Voxgig Micro frontends 10 Time for the microservice revolution on frontend? 60 Future Published in 2020 Ver. 1.0 11 Microservices – the new backend architecture standard 66 How many IT experts filled in the survey? Total answers: 669 252 163 Western Europe Eastern Europe 96 49 North America South and East Asia 23 24 Central and Middle East South America 40 22 Other Australia and 4 New Zealand 5 01 _develo- 01 pers 669 microservice experts from around the world 6 7 Microservice architecture – an architectural style where your application is based on a collection of fine-grained, interconnected services – is definitely a hot thing right now.
    [Show full text]
  • YOSSEF BENHAROSH RESUME 972 (0) 544-308209 | [email protected] | Kiryat Gat, Israel
    YOSSEF BENHAROSH RESUME 972 (0) 544-308209 | [email protected] | Kiryat Gat, Israel PHP & Drupal developer, June 2011 – present Freelance web developer for 4 years who works with the following technologies: PHP, MySQL, Javascript, jQuery, Drupal, HTML/HTML5, CSS/CSS3. Specializes in PHP development. Including: Object-Oriented Programming, mySQL as a data base, and Laravel as a framework. Drupal developer, specializing in developing new modules and themes, and in taming existing modules. Good working knowledge of organic SEO. Chosen works freefax.co.il – PHP site that provides fax services. I worked as a PHP and mySQL programmer, as well as on the front end with jQuery, Ajax, html and CSS. I wrote the cart and invoice modules and the user class. puzzlemedia.co.il – Bilingual Drupal website for film producers. www.yaronlivne.co.il – Drupal based app that I wrote most of its modules and developed its’ theme. ZEZBRA – A startup that I themed its Drupal site, as well as developed its PHP based cellular version. reshetech.co.il – Hebrew tutorials website based on PHP. phpenthusiast.com – English tutorials website devoted to Object Oriented PHP. Github projects myAPI – I think it is the simplest way to provide API services for small businesses that want to provide data based services to their customers. csvtax – Drupal 7 module that transforms a CSV file into hierarchical taxonomy. cornerslider – A jQuery popup that slides the content in and out when the user scrolls down and up the page. Technologies Back end programming languages: PHP, mySQL. Front end programming languages: CSS/3, HTML/5, javascript.
    [Show full text]
  • Microservices and Monorepos
    Microservices and Monorepos Match made in heaven? Sven Erik Knop, Perforce Software Overview . Microservices refresher . Microservices and versioning . What are Monorepos and why use them? . These two concepts seem to contradict – why mix them together? . The magic of narrow cloning . A match made in heaven! 2 Why Microservices? . Monolithic approach: App 3 Database Microservices approach . Individual Services 4 DB DB Database Versioning Microservices . Code . Executables and Containers . Configuration . Natural choice: individual repositories for each service Git . But: • Security • Visibility • Refactoring • Single change id to rule them all? 5 Monorepo . Why would you use a monorepo? . Who is using monorepos? . How would you use a monorepo? 6 Monorepos: Why would you do this? . Single Source of Truth for all projects . Simplified security . Configuration and Refactoring across entire application . Single change id across all projects . Examples: • Google, Facebook, Twitter, Salesforce, ... 7 Single change across projects change 314156 8 Monorepos: Antipatterns User workspace User workspace 9 Monorepos – view mapping User workspace . Map one or more services . Users only access files they need . Simplified pushing of changes 10 What does this have to do with Git? . Git does not support Monorepos • Limitations on number and size of files, history, contributing users • Companies have tried and failed . Android source spread over a thousand Git repositories • Requires repo and gerrit to work with 11 How can we square this circle? https://en.wikipedia.org/wiki/Squaring_the_circle 12 Narrow cloning! . Clone individual projects/services . Clone a group of projects into a single repo 13 Working with narrowly cloned repos . Users work normally in Git . Fetch and push changes from and to monorepo .
    [Show full text]
  • Design Patterns in PHP and Laravel — Kelt Dockins Design Patterns in PHP and Laravel
    Design Patterns in PHP and Laravel — Kelt Dockins Design Patterns in PHP and Laravel Kelt Dockins [email protected] Design Patterns in PHP and Laravel Kelt Dockins Dolph, Arkansas USA ISBN-13 (pbk): 978-1-4842-2450-2 ISBN-13 (electronic): 978-1-4842-2451-9 DOI 10.1007/978-1-4842-2451-9 Library of Congress Control Number: 2016961807 Copyright © 2017 by Kelt Dockins This work is subject to copyright. All rights are reserved by the Publisher, whether the whole or part of the material is concerned, specifically the rights of translation, reprinting, reuse of illustrations, recitation, broadcasting, reproduction on microfilms or in any other physical way, and transmission or information storage and retrieval, electronic adaptation, computer software, or by similar or dissimilar methodology now known or hereafter developed. Trademarked names, logos, and images may appear in this book. Rather than use a trademark symbol with every occurrence of a trademarked name, logo, or image we use the names, logos, and images only in an editorial fashion and to the benefit of the trademark owner, with no intention of infringement of the trademark. The use in this publication of trade names, trademarks, service marks, and similar terms, even if they are not identified as such, is not to be taken as an expression of opinion as to whether or not they are subject to proprietary rights. While the advice and information in this book are believed to be true and accurate at the date of publication, neither the authors nor the editors nor the publisher can accept any legal responsibility for any errors or omissions that may be made.
    [Show full text]
  • Vulnerable Web Application Framework
    University of Rhode Island DigitalCommons@URI Open Access Master's Theses 2015 Vulnerable Web Application Framework Nicholas J. Giannini University of Rhode Island, [email protected] Follow this and additional works at: https://digitalcommons.uri.edu/theses Recommended Citation Giannini, Nicholas J., "Vulnerable Web Application Framework" (2015). Open Access Master's Theses. Paper 629. https://digitalcommons.uri.edu/theses/629 This Thesis is brought to you for free and open access by DigitalCommons@URI. It has been accepted for inclusion in Open Access Master's Theses by an authorized administrator of DigitalCommons@URI. For more information, please contact [email protected]. VULNERABLE WEB APPLICATION FRAMEWORK BY NICHOLAS J. GIANNINI A THESIS SUBMITTED IN PARTIAL FULFILLMENT OF THE REQUIREMENTS FOR THE DEGREE OF MASTER OF SCIENCE IN COMPUTER SCIENCE AND STATISTICS UNIVERSITY OF RHODE ISLAND 2015 MASTER OF SCIENCE THESIS OF NICHOLAS GIANNINI APPROVED: Thesis Committee: Major Professor Victor Fay-Wolfe Lisa DiPippo Haibo He Nasser H. Zawia DEAN OF THE GRADUATE SCHOOL UNIVERSITY OF RHODE ISLAND 2015 ABSTRACT Utilizing intentionally vulnerable web applications to teach and practice cyber security principles and techniques provides a unique hands-on experience that is otherwise unobtainable without working in the real world. Creating such applications that emulate those of actual businesses and organizations without exposing actual businesses to inadvertent security risks can be a daunting task. To address these issues, this project has created Porous, an open source framework specifically for creating intentionally vulnerable web applications. The implementation of Porous offers a simplified approach to building realistic vulnerable web applications that may be tailored to the needs of specific cyber challenges or classroom exercises.
    [Show full text]
  • "Yii 2.0 Cookbook"
    Contents 0.1 Preface...............................1 1 Unnoticed basics3 2 Logging and error handling5 2.1 Logging: problems and solutions................5 3 Web essentials 11 3.1 URLs with variable number of parameters........... 11 3.2 Working with different response types............. 12 3.3 Managing cookies......................... 17 3.4 Handling incoming third party POST requests......... 19 4 SEO essentials 23 4.1 Enable pretty URLs....................... 23 4.2 Pagination pretty URLs..................... 24 4.3 Adding SEO tags......................... 25 4.4 Canonical URLs......................... 26 4.5 Using redirects.......................... 27 4.6 Using slugs............................ 28 4.7 Handling trailing slash in URLs................. 30 5 Forms 33 5.1 Using and customizing CAPTCHA............... 33 5.2 Working with ActiveForm via JavaScript............ 36 5.3 Uploading files.......................... 38 5.4 Custom validator for multiple attributes............ 41 6 Security 47 6.1 SQL injection........................... 47 6.2 XSS................................ 48 6.3 RBAC............................... 49 6.4 CSRF............................... 56 iii iv CONTENTS 7 Structuring and organizing code 59 7.1 Structure: backend and frontend via modules......... 59 7.2 Asset processing with Grunt................... 60 7.3 Using global functions...................... 64 7.4 Processing text.......................... 65 7.5 Implementing typed collections................. 66 7.6 MVC................................ 68 7.7 SOLID............................... 69 7.8 Dependencies........................... 70 8 View 73 8.1 Reusing views via partials.................... 73 8.2 Switching themes dynamically.................. 75 8.3 Post-processing response..................... 76 9 Models 77 10 Active Record 79 10.1 Single table inheritance..................... 79 11 i18n 83 11.1 Selecting application language.................. 83 11.2 Using IDs as translation source................. 87 12 Performance 89 12.1 Implementing backgroud tasks (cronjobs)..........
    [Show full text]
  • Josh Bloch Charlie Garrod
    Principles of Software Construction: Objects, Design, and Concurrency Part 4: et cetera Toward SE in practice: DevOps and branch management Josh Bloch Charlie Garrod 17-214 1 Administrivia • Homework 6 available – Checkpoint deadline tonight – Due next Wednesday, April 29th 17-214 2 Key concepts from last Thursday • SE empirical methods: Test-driven development case study • Version and release management 17-214 3 Today: Software engineering in practice • Release management, introduction to DevOps • Choose your own adventure… • Monolithic repositories 17-214 4 Consider: timelines of traditional software development e.g., the Microsoft* OS development history Source: By Paulire - Own work, CC BY-SA 4.0, https://commons.wikimedia.org/w/index.php?curid=46634740 17-214 5 Modern Facebook release cycle (1000+ diffs / day) 17-214 6 Aside: Canary testing 17-214 7 Aside: Dark launches and A/B testing • Focuses on user response to frontend changes rather than performance of backend • Measure user response via metrics: engagement, adoption 17-214 8 Version management using feature flags https://martinfowler.com/articles/feature-toggles.html https://docs.microsoft.com/en-us/azure/devops/migrate/phase-features-with-feature-flags?view=azure-devops 17-214 9 Warning! Feature flags can be dangerous Knight Capital Group realized a $460 million loss in 45-minutes, going from being the largest trader in US equities to bankruptcy. https://dougseven.com/2014/04/17/knightmare-a-devops-cautionary-tale/ 17-214 10 Configuration management in the modern world Deployment
    [Show full text]
  • Wordpress Bible, I Immediately Offered Him a Hand in Editing
    Companion Web Site • Provides code files for all examples in the book Companion Web Site Companion Aaron Brazell Install WordPress and go beyond WordPress Technical editing by Mark Jaquith, Web Site a lead WordPress core developer blogging Visit www.wiley.com/go/wordpressbible WordPress is so flexible that developers are now tapping for all of the author’s example files from the book. it to create robust applications for content, contact, and ® e-mail management. Whether you’re a casual blogger Aaron Brazell or programming pro, this comprehensive guide covers is a leading WordPress and social media consultant, with clients WordPress from the basics through advanced application ranging from enterprise software WordPress development. Learn how to use custom plugins and companies to small- and medium- sized businesses. He has worked on themes, retrieve data, maintain security, use social media, large-scale WordPress installations and modify your blog without changing any core code. from both a technical/scaling perspective to complex deliveries You’ll even get to know the ecosystem of products that involving extreme leveraging of the surrounds this popular, open-source tool. software plugin API. He maintains a large business and technology • Enhance your blog’s findability in the search engines and beyond blog in the Washington D.C. area, Technosailor.com. • Discover hooks and leverage the WordPress event-driven programming interface Mark Jaquith • Create WordPress widgets in only a few minutes is one of the lead WordPress core developers and an independent Web • Explore alternate uses of WordPress services consultant. He has consulted • Enhance your blog with WordPress MU for major clients through his company, Covered Web Services, and is the • Ensure your plugins maintain future compatibility author of several popular WordPress Install, secure, and plugins, including Subscribe to ® • Create highly customizable and dynamic themes using template tags Comments and Page Links To.
    [Show full text]