Code Monkey home page Code Monkey logo

tp-observerobservable's Introduction

Développement avancé de logiciels: patrons et modèle - TP 1

Configuration: 1 module par question

Question 1

Nous avons créé un fichier BeanFactory.xml où nous déclarons nos beans/ Premièrement, nous déclarons nos beans de quizz :

<bean id="umlQuizz" class="UMLQuizz"/>
<bean id="cmmQuizz" class="CMMQuizz"/>

Nous déclarons ensuite un bean qui permettra d'injecter les dépendances via le constructeur.

<bean id="quizzConstructor" class="QuizzMasterService" lazy-init="true">
    <constructor-arg ref="cmmQuizz"/>   <!--Select the cmmQuizz or umlQuizz-->
</bean>
<bean id="quizzSetter" class="QuizzMasterService" lazy-init="true">
    <property name="quizMaster" ref="umlQuizz"/> <!--Select the cmmQuizz or umlQuizz-->
</bean>

Il suffit de remplacer ref=cmmQuizz par ref=umlQuizz et inversement .

Nous récupérons le contexte dans le fichier QuizProgram.java

ApplicationContext context = new ClassPathXmlApplicationContext("BeanFactory.xml");

Nous récupérons ensuite le bean voulu. Pour changer la méthode d'injection, remplacer quizzConstrucor par quizzSetter.

QuizzMasterService quizzMasterService =
    (QuizzMasterService) context.getBean("quizzConstructor");

Question 2

Notifier.aj

Cet objet nous permet de notifier des changements. C'est notre observable

private PropertyChangeSupport support = new PropertyChangeSupport(this);

Nous ajoutons un pointcut lorsque la banque ajoute un nouveau client. Après l'ajout, on ajoute le client en tant qu'observer.

pointcut clientAdd(Customer customer, Bank bank) :  
    call(void Bank.addCustomer(Customer)) && args(customer) && target(bank);  


after(Customer customer, Bank bank) : clientAdd(customer, bank) {  
    support.addPropertyChangeListener(customer);  
}

Voici notre pointcut pour notifier les clients que les intérêts changent. Dès que la valeur changera, les observers seront notifiés.

pointcut interetsChangent(double value, Bank bank) :  
    call(void Bank.setTauxInteret(double)) && args(value) && target(bank);
before(double value, Bank bank) : interetsChangent(value, bank) {  
    support.firePropertyChange("tauxInteret", bank.getTauxInteret(), value);  
}

Ce sera alors cette méthode dans Customer.java qui sera appelé

@Override  
public void propertyChange(PropertyChangeEvent propertyChangeEvent) {  
  this.tauxInteret = (double) propertyChangeEvent.getNewValue();  
}

Question 3

Tout d’abord, un code doit être maintenable. Avec l’apparition des différents pattern comme le pattern MVC, les entreprises ont compris comment séparer les différents éléments afin de pouvoir répartir les différentes responsabilités de manière claire.
Premièrement le code se doit d’être maintenable et facile à corriger.
C’est pourquoi l’on opère des refontes ou “refactoring”. Plus l’architecture et le code est simple, plus l’erreur est facile à retrouver.
Ensuite c’est une question de sécurité. En effet une application utilisant une technologie obsolète ou faillible s’expose à des risques non négligeables.
L’évolution constante des différentes technologies du projet évoluent et les façons de faire aussi. Si un nouveau framework permet de faire ce que notre logiciel fait et de manière plus efficace et rapide, il apparaît clair que nous devons l’injecter à notre solution.

tp-observerobservable's People

Contributors

fabienogli avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.