background preloader

Domnikl/DesignPatternsPHP

Domnikl/DesignPatternsPHP
Related:  Design Pattern

Observer Design Pattern in PHP In the Observer pattern a subject object will notify an observer object if the subject's state changes. In this example, the PatternSubject is the subject, and the PatternObserver is the observer. For the observer to be notified of changes in the subject it must first be registered with the subject using the attach method. When the subject changes it calls the observer's update method with itself. The Observer Pattern is often called Publish-Subscribe, where the subject would be the publisher, and the observer would be the subscriber. Output BEGIN TESTING OBSERVER PATTERN *IN PATTERN OBSERVER - NEW PATTERN GOSSIP ALERT* new favorite patterns: abstract factory, decorator, visitor *IN PATTERN OBSERVER - PATTERN GOSSIP ALERT OVER* *IN PATTERN OBSERVER - NEW PATTERN GOSSIP ALERT* new favorite patterns: abstract factory, observer, decorator *IN PATTERN OBSERVER - PATTERN GOSSIP ALERT OVER* END TESTING OBSERVER PATTERN Read next All of the design patterns are compiled there. Learn more

Simple Secure Login Script Programming: doing it more vs doing it better – Kevin Martin Jose A few years ago, very early into my programming career, I came across a story: The ceramics teacher announced on opening day that he was dividing the class into two groups. All those on the left side of the studio, he said, would be graded solely on the quantity of work they produced, all those on the right solely on its quality. His procedure was simple: on the final day of class he would bring in his bathroom scales and weigh the work of the “quantity” group: fifty pound of pots rated an “A”, forty pounds a “B”, and so on. Those being graded on “quality”, however, needed to produce only one pot – albeit a perfect one – to get an “A”.Well, came grading time and a curious fact emerged: the works of highest quality were all produced by the group being graded for quantity. This little story has had a tremendous impact on how I approach software engineering as a craft. Three years later, I am still very much the apprentice. As I said, nothing you did not know before. Like this:

Practical Php Patterns: Strategy This post is part of the Practical Php Pattern series. The pattern of the day (and of the week) is one of the most important ones in object-oriented programming: the Strategy pattern. Its intent is encapsulating an algorithm into a specific object, defining a clear input and output exposed to the Context where the Strategy is used, to let them both vary independently. The Strategy used in a Context object can change for configuration purposes, thus allowing the selection of a specific behavior. ParticipantsContext: uses a Strategy object, outsourcing part of its behavior.Strategy: contract that Context sees.ConcreteStrategy: implementation of Strategy as a particular behavior.Switch statements or if-else chains are candidates for refactoring to a Strategy pattern (as they are for the State pattern). The code sample uses hidden Strategy objects for the sorting process of a Collection, in particular for comparing two values. Practical Php Patterns: Strategy

A Better Login System Net.tuts+ has published several great tutorials on user login systems. Most tutorials only deal with authenticating the user, which allows for two levels of security: logged in and not logged in. For many sites, a finer degree of control is needed to control where users can go and what they can do. Creating an access control list (ACL) system will give you the flexibility for granular permissions. Introduction Imagine you are running a great tutorial site that lets users learn about a wide variety of web development techniques. Your problem You want to restrict users' to only specific pages that their particular account allows access to. The solution Implementing an access control list will allow you a great deal of control over what users can and cannot access on your site. If you view the demo, available with the downloadable source code, you will be greeted with an index page that tests the ACL for each user. Step 1: Create the Database Step 2: Database Include Step 3: Create the ACL Class

Don’t trust agile alone to build successful products Ryan Singer illustrates this dilemma perfectly in what he calls the hill chart. The hill chart implies that we need to do hard uphill work to set ourselves up for frictionless downhill execution. It implies that we need to do actual work to figure out the best way to implement an idea before we start doing to work to implement it. When we only think and about how were are going to implement something without testing it first, we position the work at the top of the hill instead of at the bottom of the hill. The solution is to start at the foot of the hill. No matter what happens in a project, we are bound to get stuck at some point in time. A much better time to get stuck, is when you are stilling figuring things out.

Practical PHP Refactoring: Replace Type Code with State or Strategy This article is the third and last part of the refactoring from type codes miniseries.First, we saw a case where no behavior was modified by the type code values: the type code could be substituted by a single class.Second, we saw a case where behavior changed: we substituted the different type codes with subclasses of the original class.In the third case, that we'll see today, some behavior depends on the type code but extending the current class is not possible (because subclassing has been already been used, or as a design choice). This refactoring uses composition instead of inheritance. What changes from the other two refactorings? We can make a quick comparison with the other two solutions. By replacing the type code with a single class, you already use composition and define a type replacing the type code. That type now could be an interface or abstract class, while it was a concrete class in the first refactoring. Why composing type code objects? Steps Example 01.<? 06. 07. 12. 13.

marcj/php-rest-service azdanov/php-interview-exercises: Some exercises to practice whiteboard interview questions in PHP N’utilisez pas les Design Patterns en PHP N’utilisez jamais les Modèles de Conception, mais connaissez-les, maîtrisez-les ! Sous ce titre accrocheur (désolé) se cache tout de même un vrai conseil qui découle d’expériences malheureuses de développeurs enthousiastes ayant voulu se faire la main après une formation aux Patterns…. avec souvent pour résultat une conception trop lourde pour les besoins réels. Ainsi, ne cherchez jamais à utiliser les Design Pattern, n’essayez pas de les inclure dans votre conception et surtout n’essayez pas de refactoriser votre code grâce à ces derniers sous prétexte d’en améliorer la souplesse future. Par contre, étudiez les, comprenez les, relisez les, pensez à eux et accordez leur de l’attention. Le jeu des métaphores Si j’étais pianiste Les Design Pattern sont l’équivalent des gammes : Elles développent la dextérité, elles entraînent l’esprit, il est indispensable de les connaître pour composer avec, mais seules elles ne représentent pas une oeuvre. Si j’étais un joueur d’échecs Arrêtons de jouer

Designing a Secure REST (Web) API without OAuth Situation You want to develop a RESTful web API for developers that is secure to use, but doesn’t require the complexity of OAuth and takes a simple “pass the credentials in the query” approach… or something equally-as-easy for people to use, but it needs to be secure. You are a smart guy, so you start to think… Problem You realize that literally passing the credentials over HTTP leaves that data open to being sniffed in plain-text; After the Gawker incident, you realize that plain-text or weakly-hashed anything is usually a bad idea. You realize that hashing the password and sending the hash over the wire in lieu of the plain-text password still gives people sniffing at least the username for the account and a hash of the password that could (in a disturbing number of cases) be looked up in a Rainbow Table. That’s not good, so you scratch your head some more… “Still not quite right!” Solution So you keep searching for articles on “secure API design“… That seems pretty straight forward.

JQuery et Ajax - code snippets pour tous les jours - Zen Devs Le terme AJAX a été inventé il y a douze ans pour décrire une méthode de récupération de données à partir d’un serveur sans nécessiter de rafraîchissement de page. Parmi plusieurs autres fonctionnalités incroyables, jQuery est connu pour rendre l’ensemble du processus AJAX plus simple.Dans cet article, j’ai compilé des extraits de code prêts à utiliser pour les besoins quotidiens: envoi de données avec la méthode GET et POST, récupération de texte ou Json à partir de pages distantes, et plus encore. Remarque: cet article n’utilise pas le raccourci $ pour l’objet jQuery . Envoyer des données en utilisant la méthode GET jQuery.get() est une fonction abréviation AJAX, qui charge les données du serveur à l’aide d’une requête HTTP GET. L’extrait suivant montre comment envoyer deux valeurs à une page nommée mypage.php . Envoyer des données en utilisant la méthode POST Similaire à jQuery.get(), jQuery.post() charge les données du serveur à l’aide d’une requête HTTP POST. Récupérer les données JSON

Design Patterns in Java Tutorial 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. This tutorial will take you through step by step approach and examples using Java while learning Design Pattern concepts. This reference has been prepared for the experienced developers to provide best solutions to certain problems faced during software development and for un-experienced developers to learn software design in an easy and faster way. Before you start proceeding with this tutorial, I'm making an assumption that you are already aware about basic java programming concepts.

Related: