Considérez ceci 3 exemples d'entrée de manipulation:Les meilleures pratiques de gestion de l'entrée des composants en Java
/*EXAMPLE A*/
public class HandlingInputExampleA
{
private Label labelFromOtherClass; //injected by setter/constructor
private String myText = "hello ";
private int myInt = 1;
private void init()
{
Button button = new Button();
button.addClickListener(event -> labelFromOtherClass.setCaption(myText + myInt));
}
}
public class HandlingInputExampleB
{
private ClickListener inputHandler; //injected by setter/constructor
private String myText = "hello ";
private int myInt = 2;
private void init()
{
Button button = new Button();
button.addClickListener(inputHandler);
}
}
/*EXAMPLE B*/
public class HandlingInputExampleB
{
private ClickListener inputHandler; //injected by setter/constructor
private String myText = "hello ";
private int myInt = 2;
private void init()
{
Button button = new Button();
button.addClickListener(inputHandler);
}
}
public class InputHandlerB implements ClickListener
{
private HandlingInputExampleB exampleB; //injected by setter
private Label label; //injected by setter/constructor
@Override
public void buttonClick(ClickEvent event)
{
Button button = event.getButton();
if(button == exampleB.getButton())
{
label.setCaption(exampleB.getMyText() + exampleB.getMyInt());
}
}
}
/*EXAMPLE C*/
public class HandlingInputExampleC
{
private ClickListener inputHandler; //injected by setter/constructor
private String myText = "hello ";
private int myInt = 2;
private void init()
{
Button button = new Button();
button.setData(this);
button.addClickListener(inputHandler);
}
}
public class InputHandlerC implements ClickListener
{
private Label label; //injected by setter/constructor
@Override
public void buttonClick(ClickEvent event)
{
Button button = event.getButton();
if(button.getData() instanceof HandlingInputExampleC)
{
HandlingInputExampleC exampleC = (HandlingInputExampleC)button.getData();
label.setCaption(exampleC.getMyText() + exampleC.getMyInt());
}
}
}
Je suppose que je devrais garder une façon de la gestion des entrées dans mon projet. La plupart du temps, je crée une classe pour gérer les entrées et j'y injecte tous les objets nécessaires pour que chaque action associée aux entrées utilisateur soit gérée en un seul endroit. Bien sûr, plus mon projet est grand, plus la classe de gestionnaire d'entrée est grande et commence à avoir l'air un peu brouillon. Peut-être qu'il me manque une meilleure solution? Veuillez me dire lequel de ces exemples dois-je éviter?
Go avec le moins alambiquée et plus facile à comprendre/saisir la taille de votre projet. Pour une interface utilisateur simple, certains lambdas fonctionneront bien, d'autres grands projets nécessiteront des modèles MV *. – cfrick
Merci pour votre réponse! Je vais sûrement lire à propos de MV *. N'importe lequel de ces exemples est vague à partir de zéro? – avix