Skip to main content

Découpler la logique métier des composants de l'interface utilisateur

Copilot Chat peut vous aider à séparer votre logique commerciale du code de l'interface utilisateur, ce qui facilite la maintenance et l'évolution de votre application.

Dans de nombreux frameworks frontaux, la logique métier peut être intégrée dans les composants de l'interface utilisateur, ce qui rend le code difficile à maintenir ou à étendre, en particulier au fur et à mesure que l'application se développe.

Copilot Chat peut vous aider à remanier votre code pour extraire la logique métier dans des services distincts ou des solutions de gestion des états. Cela permet de réutiliser la logique métier entre différents composants de l’interface utilisateur. Elle facilite également l'extensibilité du code en séparant les préoccupations et en réduisant les interdépendances, et elle simplifie les tests unitaires en permettant de tester la logique commerciale indépendamment des composants de l'interface utilisateur.

Exemple de scénario

Dans ce code JavaScript, le composant Counter configure la logique commerciale du composant et définit également le code d'interface utilisateur pour l'utilisation du composant dans une page web.

import React, { useState } from 'react';

const Counter = () => {
  const [count, setCount] = useState(0);

  const increment = () => {
    if (count >= 10) {
      alert('Count cannot exceed 10');
      return;
    }
    setCount(count + 1);
  };

  return (
    <div>
      <p>Count: {count}</p>
      <button onClick={increment}>Increment</button>
    </div>
  );
};

export default Counter;

Exemples d’invite

Use Redux to separate the UI code from the Counter component in this code.

Exemple de réponse

Copilot fournit des instructions étape par étape pour remanier le code.

Les changements suggérés refactorisent le composant Counter pour utiliser Redux pour la gestion de l'état. Cela inclut la configuration d’un magasin Redux avec un état initial et un réducteur, la définition d’une action d’incrémentation et la modification du composant Counter pour se connecter au magasin Redux. Enfin, l’application est encapsulée avec un composant Provider pour rendre le magasin Redux disponible pour le composant Counter . Cela permet de séparer la logique de l'interface utilisateur de la gestion de l'état.

Les modifications proposées séparent le code en cinq fichiers distincts.

Note

Copilot Chat Les réponses ne sont pas déterministes, il se peut donc que vous obteniez une réponse différente de celle décrite ici.

actions.js

export const increment = () => ({
  type: 'INCREMENT'
});

reducer.js

const initialState = {
  count: 0
};

const counterReducer = (state = initialState, action) => {
  switch (action.type) {
    case 'INCREMENT':
      if (state.count >= 10) {
        alert('Count cannot exceed 10');
        return state;
      }
      return {
        ...state,
        count: state.count + 1
      };
    default:
      return state;
  }
};

export default counterReducer;

store.js

import { createStore } from 'redux';
import counterReducer from './reducer';

const store = createStore(counterReducer);

export default store;

counter.js

import React from 'react';
import { useSelector, useDispatch } from 'react-redux';
import { increment } from './actions';

const Counter = () => {
  const count = useSelector(state => state.count);
  const dispatch = useDispatch();

  return (
    <div>
      <p>Count: {count}</p>
      <button onClick={() => dispatch(increment())}>Increment</button>
    </div>
  );
};

export default Counter;

index.js

import React from 'react';
import ReactDOM from 'react-dom';
import { Provider } from 'react-redux';
import store from './store';
import Counter from './counter';

ReactDOM.render(
  <Provider store={store}>
    <Counter />
  </Provider>,
  document.getElementById('root')
);

Pour aller plus loin