mercredi 17 mai 2017

Pourquoi le mapping ORM viole les principes de la programmation orientée objet (POO)

Le sujet de cet article - pourquoi l’implémentation ORM dans Java (n’importe quelle : JPA, Hibernate, etc) ne peut pas être considérée comme un bon exemple du paradigme POO et qu'est-ce qu’on pourrait changer pour améliorer cet exemple et faire Java plus « objet-orientée ».
Tout le monde sait quand on parle d’ORM, on parle des frameworks qui nos permettent à travailler avec une base de données relationnelle. Ces frameworks JPA sont utiles pour un travail plus productif dans l’environnement Java, ou on travail avec des objets et pas avec des procédures.
Comme exemple, on regarde une classe d’unité typique Hibernate :

@Entity
@Table(name = "Users")
public class User {
   @Id @GeneratedValue
   @Column(name = "id")
   private int id;

   @Column(name = " name ")
   private String name;

   public User() {}
   public int getId() {
      return id;
   }
   public void setId( int id ) {
      this.id = id;
   }
   public String getName() {
      return name;
   }
   public void setName( String name) {
      this. name = name;
   }
}

vendredi 12 mai 2017

Un aperçu de Spring Security

Aujourd’hui on va considérer des aspects suivants de Spring Security: 

·         objets principaux. 
·         Le processus d'authentification. 
·         Intégration de Spring Security au projet. 

Spring Security est un framework Java / JavaEE, fournit un mécanisme d'authentification et d'autorisation, et d'autres fonctions de sécurité pour les applications d'entreprise construit en utilisant le framework Spring. Le projet a été lancé par Ben Alex à la fin de 2003 sous le nom de «Acegi sécurité», première version est sorti en 2004. Par la suite, le projet a été absorbé par Spring et est devenu son projet officiel affilié. Pour la première fois publiquement présenté sous un nouveau nom Spring Security 2.0.0 en Avril de 2008. 

Objets Principaux :

· SecurityContextHolder : contient des informations sur le contexte de sécurité actuel de l'application, qui contient des informations détaillées sur l'utilisateur qui travaille actuellement avec l'application. Par défaut SecurityContextHolder utilise ThreadLocal pour stocker ces informations, ce qui signifie que le contexte de sécurité est toujours disponible pour l'exécution de méthodes dans le même fil. Pour changer ca, vous pouvez utiliser une méthode statique SecurityContextHolder.setStrategyName (String strategy).
· SecurityContext, contient un objet d'authentification, i.e. les informations de sécurité associée à la demande de l'utilisateur. 
· Authentication représente un utilisateur (Principal) du point de vue du Spring Security. 
· GrantedAuthority represente l'autorisation donnée a l’utilisateur d’application, par exemple ROLE_ANONYMOUS, ROLE_USER, ROLE_ADMIN. 
· UserDetails fournit les informations nécessaires pour construire l'objet d'authentification à partir d'objets d'application DAO ou d'autres sources d'information sur la sécurité. Il contient le nom d’utilisateur, mot de passe est les flags: isAccountNonExpired, isAccountNonLocked, isCredentialsNonExpired, isEnabled et Collection des droits (rôles) de l'utilisateur. 
· UserDetailsService, l’interface utilisée pour créer l'objet UserDetails (qui réalise le seul méthode de cette interface) 

mardi 9 mai 2017

Angular JS + SQL (version simple)

Aujourd'hui, j'aimerais examiner la façon moderne et simple de faire des applications Web - en utilisant le framework Angular JS très populaire. Oui, Javascript peut communiquer avec la base de données, mais pas tout seul, mais à travers la page Web dynamique écrite dans n'importe quelle langue (Java, .NET, PHP).
Il y a 15 ans, on n'a pas pensé beaucoup a la présentation de notre appli, donc nos pages JSP / ASP / PHP ont envoyé directement la requête à la BD et l'utilisateur attendait patiemment la réponse. Ensuite, la page entière a été rechargée avec les résultats. 

La même chose quand l'utilisateur a inséré des données dans le DB.


Par contre Javascript sans Node.js n’est pas capable d’exécuter le code « server side », i.e. pour communiquer a la BD, etc. Pour cette raison on peut utiliser une page ASP/JSP/PHP qui est capable de communiquer avec la BD. Donc, l’Angular, appele la page ASP (avec un paramètre, comme ca la page peut savoir, quelle procedure il faut execute -sauvegarder, lister, effacer, etc.). Dans le cas de la liste, on utilise le paramètre « GetList », dans le cas de sauvegarde – « Save », etc.
 

vendredi 5 mai 2017

Testing pour les programmeurs


La plupart des programmeurs ne aiment pas les testeurs. Il est évident de ne pas aimer quelqu’un qui critique ton travail. L’expérience en testing chez les programmeurs se limite à des tests JUnit, qu’ils jettent à tester une fonction ou une parte de code. Donc logiquement qu’ils pensent testeurs ne sont pas nécessaires et si un programme a été écrit correctement et testé correctement au niveau des fonctions, ce programme va aussi marcher très stable quand on le mettra dans l’environnement « prod ». Les utilisateurs finaux, qui arrivent plus tard pour se plaindre que le bouton « finish » après l’affichage d’un image provoque un erreur fatale , ça donne à notre ami programmeur mal de tête et l’intention de jeter le PC à l’utilisateur.
Je ai travaillé comme un testeur pendant 3 ans après avoir travaillé comme développeur pour 4 ans et je peux dire que le travail dans le monde testing m’a vraiment aidé à devenir un meilleur programmeur. Mais non parce que on apprend de nouveaux trucs , mais parce que on gagne la vision de l’utilisateur final sur notre programme, une vision de métiers, donc ma manière de programmer devient plus « user friendly » (j’ai commencé à prêter plus d’attention puisque mes programmes seront confortables pour travailler avec).