The Clean Architecture in PHP

Total Page:16

File Type:pdf, Size:1020Kb

The Clean Architecture in PHP The Clean Architecture in PHP Kristopher Wilson This book is for sale at http://leanpub.com/cleanphp This version was published on 2015-04-24 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. ©2013 - 2015 Kristopher Wilson Dedication First and foremost, I dedicate this book to my wife, Ashley. Thank you for allowing me to spend so much time staring at millions of dots on a screen. Secondly, to my parents, who worked so hard to make sure their children had everything they needed and wanted, and for encouraging me to follow my dreams, however odd they may have been. Contents Introduction .......................................... i Organization ......................................... i The Author ......................................... i A Word about Coding Style ................................ ii The Problem With Code ................................ 1 Writing Good Code is Hard ................................. 2 Writing Bad Code is Easy .................................. 2 We Can’t Test Anything .................................. 3 Change Breaks Everything ................................. 4 We Live or Die by the Framework ............................. 4 We Want to Use All the Libraries ............................. 5 Writing Good Code ..................................... 5 What is Architecture? ..................................... 6 What does Architecture Look Like? ............................ 6 Layers of Software ..................................... 6 Examples of Poor Architecture ............................... 7 Costs of Poor Architecture ................................. 13 Coupling, The Enemy ..................................... 14 Spaghetti Coupling ..................................... 14 OOP Coupling ........................................ 14 Why is Coupling the Enemy? ................................ 15 How do we Reduce Coupling? ............................... 15 Your Decoupling Toolbox ................................ 17 Design Patterns, A Primer .................................. 18 The Factory Patterns .................................... 18 Repository Pattern ..................................... 24 Adapter Pattern ....................................... 26 Strategy Pattern ....................................... 27 Learning More Design Patterns ............................... 30 SOLID Design Principles ................................... 31 CONTENTS Single Responsibility Principle ............................... 31 Open/Closed Principle ................................... 34 Liskov Substitution Principle ................................ 35 Interface Segregation Principle ............................... 37 Dependency Inversion Principle .............................. 40 Applying SOLID Principles ................................. 42 Dependency Injection ..................................... 43 Inversion of Control ..................................... 44 When to use Dependency Injection ............................ 48 Handling Many Dependencies ............................... 50 Are we still coupling? .................................... 50 Defining a Contract with Interfaces ............................. 52 Interfaces in PHP ...................................... 52 Using Interfaces as Type Hints ............................... 54 Using Interfaces as a Contract ............................... 56 Making Third Party Code Conform to Contracts ..................... 56 Abstracting with Adapters .................................. 57 Setting up the Adapter ................................... 57 How does this help? ..................................... 58 The Clean Architecture ................................. 60 MVC, and its Limitations ................................... 61 MVC in a Diagram ..................................... 61 The MVC Components ................................... 62 Routing ........................................... 65 MVC Isn’t Good Enough .................................. 67 Obese Models ........................................ 67 More Layers for All of the Things! ............................. 68 The Clean Architecture .................................... 69 The Clean Architecture ................................... 69 The Onion Architecture ................................... 71 Framework Independence .................................. 75 The Problem with Frameworks ............................... 75 Framework Independence ................................. 76 This is a Lot of Work .................................... 83 Database Independence .................................... 84 Domain Models ....................................... 84 Domain Services ...................................... 85 Database Infrastructure / Persistence ............................ 89 Organizing the Code .................................... 92 CONTENTS Wrapping it Up ....................................... 93 External Agency Independence ............................... 94 Using Interfaces, Adapters and Dependency Injection . 94 Benefits ........................................... 96 A Case Study in Clean Architecture ........................ 97 The Billing System ...................................... 98 Application Workflow ................................... 98 Prerequisites ......................................... 99 Building Our Domain ..................................... 101 Setting up the Project ....................................101 Creating the Entities ....................................102 Domain Services ......................................106 Wrapping it Up .......................................117 Zend Framework 2 Setup ................................... 118 Installing with Composer ..................................118 Cleaning up the Skeleton ..................................119 Setting up Our Database ..................................122 Table Gateway Factory ...................................128 Wrapping it Up .......................................131 Our Application in Zend Framework 2 ........................... 133 Customer Management ...................................133 Order Management .....................................153 Invoice Management ....................................175 Doctrine 2 ........................................... 196 Rebuilding the Persistence Layer ..............................197 Creating Doctrine-based Repositories . 197 Entity Mapping .......................................201 Integrating Zend Framework and Doctrine . 203 Injecting the New Repositories ...............................205 Updating the Hydrators ...................................207 Summary ..........................................210 Switching to Laravel ..................................... 211 Setting up Laravel ......................................211 Configuring Doctrine ....................................213 Setting up the Dashboard ..................................215 Customer Management ...................................218 Order Management .....................................226 Invoice Management ....................................233 Next Steps ..........................................241 CONTENTS Summary ..........................................241 Introduction Figuring out how to architect a brand new application is a big deal. Doing it the wrong way can lead to a huge headache later. Testing can become hard – or maybe even impossible – and refactoring is an absolute nightmare. While the methods outlined in this book aren’t the only way to go about developing an application, they do provide a framework for developing applications that are: 1. Testable 2. Refactorable 3. Easy to work with 4. Easy to maintain This book is for anyone wanting to build a medium to large sized application that must be around for a long time and/or be easily enhanced in the future. The methods outlined in this book aren’t meant for all applications, and they might be downright over kill for some. If your application is small, or an unproven, new product, it might be best to just get it out the door as fast as possible. If it grows, or becomes successful, later applying these principles may be a good idea to create a solid, long lasting product. The principles outlined in this book involve a learning curve. Writing code this way will slow a developer down until the methods become familiar to them. Organization This book begins by discussing common problems with PHP code and why having good, solid, clean code is important to the success and longevity of an application. From there, we move on to discussing some principles and design patterns that allow us to solve problems with poor code. Using these concepts, we’ll then discuss the Clean Architecture and how it further helps solve problems with bad code. Finally, in the second half of the book, we dive into some real code and build an application following this architecture. When we’re done with our case study application, we’ll start swapping out components, libraries, and frameworks with new ones to prove out the principles of the architecture. The Author My name is Kristopher Wilson. I’ve been developing in PHP since around 2000. That sounds impressive on the surface, but most of those years involved writing truly terrible code. I would Introduction ii have benefited greatly
Recommended publications
  • PHP Tech Stack Other Experience Everyday Tools Languages
    Igor Tverdokhleb Work permit: RU+DE the Senior PHP developer who is practicing Location: Hamburg SOLID and designing & implementing scalable systems, that are mostly using ElasticSearch, + 49 (152) 244-15-088 Redis, MySQL & Running on AWS. [email protected] I have a strong point about the application performance. github.com/arku31 arku-cv.com SKILLS PHP Tech stack Daily using - Laravel / Lumen Docker (Expert) Mac -- Eloquent ORM/Migrations Linux (Advanced) PHPStorm -- Events/Listeners apache / nginx / php-fpm CI/CD (usually gitlab) -- Middlewares/Nova mysql / pgsql NewRelic / Datadog - Swoole redis / memcached Blackfire - Phalcon ElasticSearch - Symfony Queues (SQS, Laravel) Languages - Laminas (Zend) - Various libraries Other experience - xDebug Java (Spring) / GoLang (minor) Russian English German - PHPUnit JS + jQuery + Vue.js (minor) native B2+ B1 - PSR / PHPCS WordPress + ACF (advanced) EXPERIENCE EDUCATION Feb 2018 - NOW PHP Developer in AboutYou Gmbh. Hamburg, 2010 - 2014 Orenburg State University Germany. specialty: computers, systems and Phalcon / Laravel / Laminas projects networks development. Mostly working on a cache diploma: A tool to manage layer with usage of Elasticsearch and Redis. customer sales department was written on pure PHP+MySQL and Maj 2016 - Feb 2018 PHP/JS Developer in LOFTSCHOOL LTD, Loftschool group. Saint-Petersburg, Russia. php-gd + dompdf Development and maintaining education 2006 - 2010 Orenburg Information Technologies College platform using Laravel. Implemented e.g. backoffice, flexible discounts, analyzing specialty: Automated systems center and social/payment network diploma: The self-made Linux integrations. distributive booted via PXE network to use on nonHDD Nov 2015 - Maj 2016 PHP Developer in ITLOFT LTD, Loftschool group. workstations with control panel Saint-Petersburg, Russia. using bash scripts + PHP as Have developed over 50 websites, mostly background.
    [Show full text]
  • Security Issues and Framework of Electronic Medical Record: a Review
    Bulletin of Electrical Engineering and Informatics Vol. 9, No. 2, April 2020, pp. 565~572 ISSN: 2302-9285, DOI: 10.11591/eei.v9i2.2064 565 Security issues and framework of electronic medical record: A review Jibril Adamu, Raseeda Hamzah, Marshima Mohd Rosli Faculty of Computer and Mathematical Sciences, Universiti Teknologi MARA, Malaysia Article Info ABSTRACT Article history: The electronic medical record has been more widely accepted due to its unarguable benefits when compared to a paper-based system. As electronic Received Oct 30, 2019 medical record becomes more popular, this raises many security threats Revised Dec 28, 2019 against the systems. Common security vulnerabilities, such as weak Accepted Feb 11, 2020 authentication, cross-site scripting, SQL injection, and cross-site request forgery had been identified in the electronic medical record systems. To achieve the goals of using EMR, attaining security and privacy Keywords: is extremely important. This study aims to propose a web framework with inbuilt security features that will prevent the common security vulnerabilities CodeIgniter security in the electronic medical record. The security features of the three most CSRF popular and powerful PHP frameworks Laravel, CodeIgniter, and Symfony EMR security issues were reviewed and compared. Based on the results, Laravel is equipped with Laravel security the security features that electronic medical record currently required. SQL injection This paper provides descriptions of the proposed conceptual framework that Symfony security can be adapted to implement secure EMR systems. Top vulnerabilities This is an open access article under the CC BY-SA license. XSS Corresponding Author: Jibril Adamu, Faculty of Computer and Mathematical Sciences, Universiti Teknologi MARA, 40450 Shah Alam, Selangor, Malaysia.
    [Show full text]
  • Full Stack Development
    PRESENTED BY: Mazhar K What is a Full Stack ? ● Able to work on front-end and back-end portions of an application. ● Front-end: Portion of an application the user will see or interact with ● Back-end: Part of an application that handles the logic, database interactions, user authentication, server configuration, etc. ● Database: Structured set of data held in a computer, more organized and complex sometimes. Full Stack Developer I define the basic stack as follows: ● HTML ● CSS ● JavaScript ● One general-purpose programming language (Ruby, Python, PHP, etc) ● One relational database system (Postgres, MySQL, Oracle, etc) ● One web server (nginx, Apache, etc) ● One deployment operating system (Ubuntu, CentOS, FreeBSD, etc) ● One version-control system (git. don't bother with the etc) Keys for Full Stack HTML/ CSS ● HTML: HyperText Markup Language ● CSS: Cascading Style Sheets ● Basically called as “building blocks of the web” ● HTML - Allows you to add content to the website ● CSS - Allows you to style your content ● Bootstrap: a framework for helping design and layout content on a page JavaScript ● JavaScript: Most popular language in Full-Stack, Front-end, and Back-end Development. ● Only language that runs natively in the browser, and can double up as a server-side language as well. ● It’s a high-level programing language ● It’s a language that is also characterized as dynamic, weakly typed, prototype-based and multi-paradigm. ● Frameworks: Angular & React ● JSON: JavaScript Object Notation Back-end Language ● Will handle stuff like database operations, user authentication, and application logic. ● Node.js: framework that will aid you in developing web application is Express.
    [Show full text]
  • Modern Web Application Frameworks
    MASARYKOVA UNIVERZITA FAKULTA INFORMATIKY Û¡¢£¤¥¦§¨ª«¬­Æ°±²³´µ·¸¹º»¼½¾¿Ý Modern Web Application Frameworks MASTER’S THESIS Bc. Jan Pater Brno, autumn 2015 Declaration Hereby I declare, that this paper is my original authorial work, which I have worked out by my own. All sources, references and literature used or ex- cerpted during elaboration of this work are properly cited and listed in complete reference to the due source. Bc. Jan Pater Advisor: doc. RNDr. Petr Sojka, Ph.D. i Abstract The aim of this paper was the analysis of major web application frameworks and the design and implementation of applications for website content ma- nagement of Laboratory of Multimedia Electronic Applications and Film festival organized by Faculty of Informatics. The paper introduces readers into web application development problematic and focuses on characte- ristics and specifics of ten selected modern web application frameworks, which were described and compared on the basis of relevant criteria. Practi- cal part of the paper includes the selection of a suitable framework for im- plementation of both applications and describes their design, development process and deployment within the laboratory. ii Keywords Web application, Framework, PHP,Java, Ruby, Python, Laravel, Nette, Phal- con, Rails, Padrino, Django, Flask, Grails, Vaadin, Play, LEMMA, Film fes- tival iii Acknowledgement I would like to show my gratitude to my supervisor doc. RNDr. Petr So- jka, Ph.D. for his advice and comments on this thesis as well as to RNDr. Lukáš Hejtmánek, Ph.D. for his assistance with application deployment and server setup. Many thanks also go to OndˇrejTom for his valuable help and advice during application development.
    [Show full text]
  • Ioc Containers in Spring
    301AA - Advanced Programming Lecturer: Andrea Corradini [email protected] http://pages.di.unipi.it/corradini/ AP-2018-11: Frameworks and Inversion of Control Frameworks and Inversion of Control • Recap: JavaBeans as Components • Frameworks, Component Frameworks and their features • Frameworks vs IDEs • Inversion of Control and Containers • Frameworks vs Libraries • Decoupling Components • Dependency Injection • IoC Containers in Spring 2 Components: a recap A software component is a unit of composition with contractually specified interfaces and explicit context dependencies only. A software component can be deployed independently and is subject to composition by third party. Clemens Szyperski, ECOOP 1996 • Examples: Java Beans, CLR Assemblies • Contractually specified interfaces: events, methods and properties • Explicit context dependencies: serializable, constructor with no argument • Subject to composition: connection to other beans – Using connection oriented programming (event source and listeners/delegates) 3 Towards Component Frameworks • Software Framework: A collection of common code providing generic functionality that can be selectively overridden or specialized by user code providing specific functionality • Application Framework: A software framework used to implement the standard structure of an application for a specific development environment. • Examples: – GUI Frameworks – Web Frameworks – Concurrency Frameworks 4 Examples of Frameworks Web Application Frameworks GUI Toolkits 5 Examples: General Software Frameworks – .NET – Windows platform. Provides language interoperability – Android SDK – Supports development of apps in Java (but does not use a JVM!) – Cocoa – Apple’s native OO API for macOS. Includes C standard library and the Objective-C runtime. – Eclipse – Cross-platform, easily extensible IDE with plugins 6 Examples: GUI Frameworks • Frameworks for Application with GUI – MFC - Microsoft Foundation Class Library.
    [Show full text]
  • Design Pattern Interview Questions
    DDEESSIIGGNN PPAATTTTEERRNN -- IINNTTEERRVVIIEEWW QQUUEESSTTIIOONNSS http://www.tutorialspoint.com/design_pattern/design_pattern_interview_questions.htm Copyright © tutorialspoint.com Dear readers, these Design Pattern Interview Questions have been designed specially to get you acquainted with the nature of questions you may encounter during your interview for the subject of Design Pattern. As per my experience good interviewers hardly plan to ask any particular question during your interview, normally questions start with some basic concept of the subject and later they continue based on further discussion and what you answer: What are Design Patterns? Design patterns represent the best practices used by experienced object-oriented software developers. Design patterns are solutions to general problems that software developers faced during software development. These solutions were obtained by trial and error by numerous software developers over quite a substantial period of time. What is Gang of Four GOF? In 1994, four authors Erich Gamma, Richard Helm, Ralph Johnson and John Vlissides published a book titled Design Patterns - Elements of Reusable Object-Oriented Software which initiated the concept of Design Pattern in Software development. These authors are collectively known as Gang of Four GOF. Name types of Design Patterns? Design patterns can be classified in three categories: Creational, Structural and Behavioral patterns. Creational Patterns - These design patterns provide a way to create objects while hiding the creation logic, rather than instantiating objects directly using new opreator. This gives program more flexibility in deciding which objects need to be created for a given use case. Structural Patterns - These design patterns concern class and object composition. Concept of inheritance is used to compose interfaces and define ways to compose objects to obtain new functionalities.
    [Show full text]
  • Architectural Support for Scripting Languages
    Architectural Support for Scripting Languages By Dibakar Gope A dissertation submitted in partial fulfillment of the requirements for the degree of Doctor of Philosophy (Electrical and Computer Engineering) at the UNIVERSITY OF WISCONSIN–MADISON 2017 Date of final oral examination: 6/7/2017 The dissertation is approved by the following members of the Final Oral Committee: Mikko H. Lipasti, Professor, Electrical and Computer Engineering Gurindar S. Sohi, Professor, Computer Sciences Parameswaran Ramanathan, Professor, Electrical and Computer Engineering Jing Li, Assistant Professor, Electrical and Computer Engineering Aws Albarghouthi, Assistant Professor, Computer Sciences © Copyright by Dibakar Gope 2017 All Rights Reserved i This thesis is dedicated to my parents, Monoranjan Gope and Sati Gope. ii acknowledgments First and foremost, I would like to thank my parents, Sri Monoranjan Gope, and Smt. Sati Gope for their unwavering support and encouragement throughout my doctoral studies which I believe to be the single most important contribution towards achieving my goal of receiving a Ph.D. Second, I would like to express my deepest gratitude to my advisor Prof. Mikko Lipasti for his mentorship and continuous support throughout the course of my graduate studies. I am extremely grateful to him for guiding me with such dedication and consideration and never failing to pay attention to any details of my work. His insights, encouragement, and overall optimism have been instrumental in organizing my otherwise vague ideas into some meaningful contributions in this thesis. This thesis would never have been accomplished without his technical and editorial advice. I find myself fortunate to have met and had the opportunity to work with such an all-around nice person in addition to being a great professor.
    [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]
  • Php[Architect] Journal
    FREE Article! Education Station Easy Image Manipulation with Glide Matthew Setter Welcome back to another edition of Education Station. In this month’s edition, we’re going to have fun with images; specifically, we’re going to look at a library that makes it easy to manage just about everything to do with images in a web application. What’s more, it’s a library brought to you by The PHP League, otherwise known as The League of Extraordinary Packages—it’s called Glide. DisplayInfo() Requirements: • PHP 5.4 or above • Composer • Git • Glide - http://glide.thephpleague.com Related URLs: • Silex Documentation - http://silex.sensiolabs.org/documentation 2 | May 2015 www.phparch.com Education Station Easy Image Manipulation with Glide But before we get into it, let’s set the scene Installing Glide & Silex appropriately. You’re building a web application (or a website for a client), and you need to make images Assuming that you already have a new project available, with no more effort than a standard HTML directory set up for testing out Glide and that you have img link. But via that link, you need to be able to Composer in your system path, in the project directory, pass different parameters, allowing for the image you can create a new composer.json file and add in to be rendered with a range of different effects and the configuration below. You should also ensure the transformations, such as the following: exif extension is enabled in your php installation. • Image manipulation (including cropping, { stretching, and resizing) "require": { • Image adjustment (including setting the "league/glide": "0.3.*" brightness, contrast, and gamma level) } • Image effects (including blurring, pixelation, and } filtering) • Image quality • Securing image URLs against user abuse Alternatively, you can run the following commands, which will do it for you: If you wanted all of this, it’s understandable that to code it in-house would take quite a bit of time and composer require league/glide:"0.3.*"; effort.
    [Show full text]
  • Facet: a Pattern for Dynamic Interfaces
    Facet: A pattern for dynamic interfaces Author: Eric Crahen SUNY at Buffalo CSE Department Amherst, NY 14260 201 Bell Hall 716-645-3180 <[email protected]> Context: Wherever it is desirable to create a context sensitive interface in order to modify or control the apparent behavior if an object. Problem: How can I modify the behavior of an existing object so that different behaviors are shown under different circumstances; and yet still maintain a clean separation between the policy (when each behavior is available) and implementation of each behavior allowing them to be developed independently of one another? Forces: Interfaces provide an essential level of abstraction to object oriented programming. Generally, objects are able define aspects of their function very well using interfaces. At times, this may not be enough. When dealing with two or more classes whose responsibilities are distinctly separate, but whose behavior is closely related, classes can begin to resist modularization. For example, adding security to an application means inserting code that performs security checks into numerous locations in existing classes. Clearly, these responsibilities are distinct; the original classes being responsible for the tasks they were designed to perform, and the security classes being responsible for providing access control. However, making those original classes secure means intermingling code that deals with security. When the classes dealing with security are changed many classes are going to be impacted. One method of adding new behavior to an existing class might be to simply create a subclass and embed that new behavior. In the security example, this would mean creating a subclass for each class that needs to be secure and adding calls to the security code.
    [Show full text]
  • Implementación De Framework De Desarrollo Web Durante Un Proyecto”
    UNIVERSIDAD POLITÉCNICA DE SINALOA PROGRAMA ACADÉMICO DE INGENIERÍA EN INFORMÁTICA Tesina “Implementación de Framework de desarrollo web durante un proyecto” Para obtener la acreditación de las estadías profesionales y contar con los créditos para el grado de Ingeniero en Informática. Autor: Bernal Corral Daniel Asesor: M. C. Alejandro Pérez Pasten Borja Asesor OR: Ing. Omar Vidaña Peraza Mazatlán, Sinaloa 13 de Diciembre del 2019 Agradecimientos Agradezco a mis padres por brindarme todo su apoyo durante mis estudios, por darme las clases más importantes, por haber hecho posible que llegara a este momento, por enseñarme que no siempre todo sale perfecto y que debo esforzarme para obtener lo que quiero, por darme ánimos para seguir, por preocuparse por mí y esforzarse para que mi vida fuera mejor. A mi asesor por aconsejarme y corregir los errores que cometí durante el desarrollo de la tesina, por tomarse el tiempo para ver cada detalle y hacer recomendaciones, sugerir opciones, etc. A mi hermano por ayudarme a no rendirme, por asumir su rol de hermano mayor y tratar de guiar, por preocuparse por mí y ayudarme siempre que lo he necesitado. A los profesores que he tenido a lo largo de mis estudios y que me aportaron un poco de su conocimiento para enriquecer el mío. A todos mis compañeros que me ayudaron a hacer más amenas las clases. 6 ÍNDICE TEMÁTICO Índice de imágenes. 9 Resumen. ….. .11 Abstract. …. .11 Introducción. 11 Capítulo I. .. ... …12 1. Antecedentes. .. 13 1.1. Localización. .. ….. 13 1.2. Objetivos de la institución. …………….. 13 1.3. Visión. .14 1.4.
    [Show full text]
  • A Mathematical Approach to Object Oriented Design Patterns
    06.2006 J.Natn.Sci.FoundationObject oriented design Sripatterns Lanka 2008 36 (3):219-227 219 RESEARCH ARTICLE A mathematical approach to object oriented design patterns Saluka R. Kodituwakku1*and Peter Bertok2 1 Department of Statistics and Computer Science, Faculty of Science, University of Peradeniya, Peradeniya. 2 Department of Computer Science, RMIT University, Melbourne, Australia. Revised: 27 May 2008 ; Accepted: 18 July 2008 Abstract: Although design patterns are reusable design the distribution of responsibilities. For ease of learning elements, existing pattern descriptions focus on specific and reference, in1, design patterns are organized into a solutions that are not easily reusable in new designs. This paper catalogue. introduces a new pattern description method for object oriented design patterns. The description method aims at providing a The catalogue is formed by two criteria: purpose more general description of patterns so that patterns can be and scope. According to their purpose, design patterns readily reusable. This method also helps a programmer to are classified into creational, structural and behavioural, analyze, compare patterns, and detect patterns from existing software programmes. whereas the scope divides patterns into class patterns and object patterns. Class patterns capture relationships This method differs from the existing pattern description between classes and their subclasses; object patterns deal methods in that it captures both static and dynamic properties with relationships between objects. of patterns. It describes them in terms of mathematical entities rather than natural language narratives, incomplete graphical Software patterns provide reusable solutions to notations or programme fragments. It also helps users to recurring design problems. Even if we have reusable understand the patterns and relationships between them; and solutions they may not be effectively reused, because select appropriate patterns to the problem at hand.
    [Show full text]