Devops for Growth
112.1K views | +9 today
Follow
Devops for Growth
For Product Owners/Product Managers and Scrum Teams: Growth Hacking, Devops, Agile, Lean for IT, Lean Startup, customer centric, software quality...
Curated by Mickael Ruau
Your new post is loading...
Your new post is loading...

Popular Tags

Current selected tag: 'design pattern'. Clear
Scooped by Mickael Ruau
April 11, 2015 5:41 AM
Scoop.it!

Design Patterns du Gang of Four appliqués à Java

Design Patterns du Gang of Four appliqués à Java | Devops for Growth | Scoop.it
Cet article a pour objectif de présenter les Design Patterns du "Gang of Four" avec des exemples concis appliqués à Java.
Chaque Design Pattern est présenté avec son diagramme de classes, ses objectifs, les motivations pour l'utiliser, les responsabilités des classes le constituant, puis une implémentation simple.
No comment yet.
Scooped by Mickael Ruau
February 25, 2015 3:30 AM
Scoop.it!

Core J2EE Patterns

Core J2EE Patterns | Devops for Growth | Scoop.it

Click on any pattern name to view the pattern in detail. Click here for printable view.

No comment yet.
Scooped by Mickael Ruau
February 16, 2015 5:17 PM
Scoop.it!

Tutoriel sur une introduction à CDI (Context and Dependency Injection)

Tutoriel sur une introduction à CDI (Context and Dependency Injection) | Devops for Growth | Scoop.it
L'injection de dépendances est souvent la base de tout programme moderne. L'idée en résumé est de déporter la responsabilité de la liaison des composants du programme dans un framework afin de pouvoir facilement changer ces composants ou leur comportement. Parmi les leaders du marché Java, il y a Spring IoC, Guice, Dagger… ou encore le standard « Java EE » CDI qui existe depuis Java EE 6. Ce dernier s'est inspiré de plusieurs standards de facto, pour finalement devenir aujourd'hui la base de la plateforme Java EE moderne. Ce tutoriel vous propose un tour d'horizon des fonctionnalités de base de CDI.
No comment yet.
Scooped by Mickael Ruau
February 1, 2015 6:06 AM
Scoop.it!

How The Decorator Pattern Saved My Day - blog@CodeFX

How The Decorator Pattern Saved My Day - blog@CodeFX | Devops for Growth | Scoop.it
At work I am dealing with a huge Java code base, which was developed over the course of more than 15 years by many different developers. Not all things were done by the books but at the same time I usually don’t have the possibility to refactor every oddity I come across.

Still, steps towards higher code quality can be taken every day. And today was just like that…

Overview

This post does not aim at teaching the decorator pattern as plenty tutorials already exist. Instead, it gives a real life example of how it came in handy and saved the day.

Contents [hide]
The Situation
The Solution With One Configurable Class
The Solution With Inheritance
The Change
Decorator Pattern To The Rescue
The Decorator Pattern
In Action
The Effect
Reflection
Mickael Ruau's insight:
The Situation

Our UI hosts Swing’s JEditorPanes, which are used to display HTML. Interaction with the various links (like hovering and clicking) triggers one or more of these responses:

  1. logging the event
  2. changing the cursor
    (something the JEditorPane already does on its own; seemingly since May 2000 – what the …?!)
  3. updating the pane with the linked content
  4. opening an external browser
  5. opening an external application
  6. handling an internal service request

These responses are not the same for all panes. There are several of them with partly different needs. (If you know the decorator pattern, you see where this is going.)

So the question is: How do you implement these responses?

No comment yet.
Scooped by Mickael Ruau
February 11, 2014 4:53 AM
Scoop.it!

Qualité du code | The .Net frog

Je le dirai honnêtement: je n'aime pas le pattern appelé singleton. Ce pattern était très utile il y a quelques années, avant l'émergence de techniques comme dependency injection (injection de dépendances) ou dependency lookup (recherche de dépendances). Malheureusement pour moi, ce pattern est probablement celui qui est le plus (mal!) utilisé dans le développement logiciel. Je l'admets volontiers, le singleton peut être utile dans de nombreux scénarios, mais sérieusement... pas partout!

Mickael Ruau's insight:

Les principaux problèmes avec les singletons sont évidents:

  • Vous ne contrôlez pas le moment auquel l'instance de la classe est créée. Si vous utilisez beaucoup de singletons dans vos projets, vous n'aurez aucune idée de l'ordre dans lequel les objets sont créés. Ce n'est pas un gros problème pour les petits logiciels, mais c'est plus inquiétant lorsque vous avez quelques centaines de millier de lignes de code...
  • 99% du temps, l'implémentation utilisé pour le singleton nous lie à une classe spécifique. En conséquent, vous serez obligé de refactorisé le singleton ou d'utiliser des framewoks comme TypeMock si vous voulez tester votre code. (Vous pouvez également avoir un singleton qui offrira une point d'accès à la seule et unique instance d'une seconde classe en la castant en une interface. Problème: a moins que cette seconde classe soit aussi un singleton, rien ne garanti qu'il n'existe qu'une seule instance...)
  • Les dépendances ne sont pas évidentes (ce qui peut également être un problème avec l'utilisation du pattern dependency lookup). Si vous avez un type A qui utilise un singleton de type B, rien dans la signature de A ne fera apparaitre la dépendance au grand jour. Par exemple, ce peut être un problème si vous n'êtes pas au courant qu'utiliser A peut provoquer quelques dizaines d'appels à la base de données par l'intermédiaire de B!


Cependant, j'ai récemment découvert un pattern pire que le singleton: je l'appelle le singleton nul !

No comment yet.
Scooped by Mickael Ruau
February 11, 2014 4:49 AM
Scoop.it!

[Design Patterns] Partie 2: DIP: Dependency Inversion Principle , Thomas Jaskula

[Design Patterns] Partie 2: DIP: Dependency Inversion Principle , Thomas Jaskula | Devops for Growth | Scoop.it

C’est le dernier principe des principes du Design Orienté Objet (The Principles of Object Oriented Design) fondés par Robert C. Martin plus connu sous le pseudonyme d’Uncle Bob.

Mickael Ruau's insight:
Dependency Inversion Principle (DIP): Principe d’Inversion de Dépendance.

“A: Les modules de plus haut niveau ne doivent pas dépendre des modules de plus bas niveau. Les deux doivent dépendre des abstractions”

“B: Les abstractions ne doivent pas dépendre des détails. Les détails doivent dépendre des abstractions”

Le terme d’inversion de dépendance (DIP) est souvent assimilé aux termes d’Injection de dépendance et Inversion of Control (IoC). Pour ma part j’estime que l’injection de dépendance est un sujet très important de connaître et franchement, pour construire des applications robustes et évolutives il est très difficile de passer à côté. Je vais vous épargner le grand débat théorique dont j’ai l’habitude :) et cette fois ci passons directement à l’exemple. Le but de DI (et autre principes S.O.L.I.D) est de palier les problèmes liés au mauvais design des applications. Bien que vous utilisez l’approche OOP, votre code est structuré à l’intérieur des classes mais il est toujours très difficile à le modifier et à le faire évoluer. C’est à cause de ces dépendances que les classes ont entre elles et si vous modifiez une classe il y a un risque qu’une autre “pète” à l’autre bout de la planète :)

No comment yet.
Scooped by Mickael Ruau
February 26, 2015 3:31 AM
Scoop.it!

Surfacing Hidden Design: Seeking A Better Alternative To Interrelated Mutable Fields

Surfacing Hidden Design: Seeking A Better Alternative To Interrelated Mutable Fields | Devops for Growth | Scoop.it
What is better, a bunch of mutable boolean fields and methods operating on them, or an explicit expression of the individual states and transitions between them? Lets study an example from a simulation of the progression of a multi-stage infection.
No comment yet.
Scooped by Mickael Ruau
February 18, 2015 3:34 AM
Scoop.it!

Simple vs. Easy: Writing A Generic Code To Avoid Duplication (Representation of Data To Import)

Simple vs. Easy: Writing A Generic Code To Avoid Duplication (Representation of Data To Import) | Devops for Growth | Scoop.it
In our batch jobs for data import we had many similar classes for holding the data being imported. Technically they are all different, with different fields, yet conceptually they are all same. I find this conceptual duplication discomforting and have written a single, more generic, class to replace them all.

The refactoring has been inspired by Clojure and its preference of few generic structures such as maps with many functions over the OO way of many case-specific data structures (i.e. classes), as explained for example in this interview of Rich Hickey, starting with “OO can seriously thwart reuse”.
Mickael Ruau's insight:

Improvements We have replaced about 15 classes with one, made it possible to change the way data are transformed into a tab-separated string at a single place (DRY), and provided a nice, fluent API whose use looks quite similarly at each place. The new MapLogEntry is also much more testing-friendly (it would be a nightmare to modify all the existing classes to support what M.L.E. does).

No comment yet.
Scooped by Mickael Ruau
February 2, 2015 2:39 AM
Scoop.it!

Design Patterns

Design Patterns | Devops for Growth | Scoop.it
Design patterns. Design patterns source code examples. Design patterns tutorials and guides.
Mickael Ruau's insight:

Some authors allege that design patterns don't differ significantly from other forms of abstraction, and that the use of new terminology (borrowed from the architecture community) to describe existing phenomena in the field of programming is unnecessary. The Model-View-Controller paradigm is touted as an example of a "pattern" which predates the concept of "design patterns" by several years. It is further argued by some that the primary contribution of the Design Patterns community (and the Gang of Four book) was the use of Alexander's pattern language as a form of documentation; a practice which is often ignored in the literature.

No comment yet.
Scooped by Mickael Ruau
December 24, 2014 10:34 AM
Scoop.it!

ORM is an anti-pattern | Seldo.Com Blog

ORM is an anti-pattern | Seldo.Com Blog | Devops for Growth | Scoop.it
What's an anti-pattern?

I was pleased to discover that Wikipedia has a comprehensive list of anti-patterns, both from within the world of programming and outside of it. The reason I call ORM an anti-pattern is because it matches the two criteria the author of AntiPatterns used to distinguish anti-patterns from mere bad habits, specifically:

It initially appears to be beneficial, but in the long term has more bad consequences than good ones
An alternative solution exists that is proven and repeatable
It is the first characteristic that has led to ORM's maddening (to me) popularity: it seems like a good idea at first, and by the time the problems become apparent, it's too late to switch away.
Mickael Ruau's insight:
In summary (TL;DR)
  • ORM is initially simpler to understand and faster to write than SQL-based model code
  • Its efficiency in the early stages of any project is adequate
  • Unfortunately, these advantages disappear as the project increases in complexity: the abstraction breaks down, forcing the dev to use and understand SQL
  • Entirely anecdotally, I claim that the abstraction of ORM breaks down not for 20% of projects, but close to 100% of them.
  • Objects are not an adequate way of expressing the results of relational queries.
  • The inadequacy of the mapping of queries to objects leads to a fundamental inefficiency in ORM-backed applications that is pervasive, distributed, and therefore not easily fixed without abandoning ORM entirely.
  • Instead of using relational stores and ORM for everything, think more carefully about your design
  • If your data is object in nature, then use object stores ("NoSQL"). They'll be much faster than a relational database.
  • If your data is relational in nature, the overhead of a relational database is worth it.
  • Encapsulate your relational queries into a Model layer, but design your API to serve the specific data needs of your application; resist the temptation to generalize too far.
  • OO design cannot represent relational data in an efficient way; this is a fundamental limitation of OO design that ORM cannot fix.
No comment yet.
Scooped by Mickael Ruau
February 11, 2014 4:50 AM
Scoop.it!

Flexibilité: Modifiez vos dépendances pour des applications plus flexibles

Flexibilité: Modifiez vos dépendances pour des applications plus flexibles | Devops for Growth | Scoop.it

Cet article aborde les sujets suivants:

  • Ce qui ne va pas avec les architectures étroitement couplées
  • Problèmes de tests et de dépendances
  • Inversion de dépendance
  • Injection de dépendance


Téléchargement du code disponible sur: DependencyInjection2008_03.exe (5408 KB)

Mickael Ruau's insight:
 Sommaire
No comment yet.
Scooped by Mickael Ruau
February 11, 2014 4:47 AM
Scoop.it!

[Design Patterns] Partie 1: SRP: Single Responsibility Principle , Thomas Jaskula

[Design Patterns] Partie 1: SRP: Single Responsibility Principle , Thomas Jaskula | Devops for Growth | Scoop.it
l’image empruntée de LosTechies . Pour continuer le sujet que j’ai introduit dans un de mes posts précédents [Design Patterns] Est-ce que votre code est S.O.L.I.D(e) - Introduction je m’attaque à la première bonne pratique: Single Responsibility Principle
Mickael Ruau's insight:
Single Responsibility Principle (SRP) : Principe de Responsabilité Unique.

“Une classe ne doit avoir qu'une raison pour qu'elle change”

Qu’est-ce que cela veut dire ?  Chaque développeur dans son travail de tous les jours a des problèmes plus ou moins complexes à résoudre. Il est souvent très difficile de résoudre un problème en le traitant dans sa globalité, surtout quand les paramètres qui le définissent changent de temps en temps. En découpant le “gros” problème en des mini-problèmes permet de les résoudre beaucoup plus facilement. En fait, chaque mini-problème peut être assimilé à une tâche concrète qui à son tour peut être implémentée à l’aide d’une simple classe. Puisque chaque classe a une simple tâche à accomplir il y a par conséquence une seule raison pour qu’elle change. Nous pouvons donc changer juste cette classe si la tâche correspondante change. Comme vous-vous en doutez une tâche = une responsabilité.

Cela signifie également que nous devons apprendre à découper les problèmes car les problèmes complexes sont difficile à résoudre en tant que l’ensemble indivisible. Cela permet de réduire la complexité de l’ensemble car chaque mini-problème peut être traité séparément.

L’application de SRP est aussi bénéfique à la qualité de votre code ainsi qu’à la modélisation objet que vous faites. Pourquoi ? Car le code est:

  • plus robuste.
  • plus facile à lire et à comprendre.
  • plus facile à tester et à maintenir.
  • plus facile à étendre avec de nouvelles fonctionnalités.
No comment yet.