Entkoppelung von ViewModels in Javafx + Spring Boot MVVM - Javafx -Eigenschaften vs. Spring Events?Java

Java-Forum
Anonymous
 Entkoppelung von ViewModels in Javafx + Spring Boot MVVM - Javafx -Eigenschaften vs. Spring Events?

Post by Anonymous »

Ich erstelle eine Javafx + Spring -Boot -Anwendung mit dem MVVM -Muster. Ein WizardViewModel fährt eine Sequenz von Schritten (STEP_ONE → STEP_TWO bis StepViewModel macht dies derzeit, wenn es beendet ist: < /p>

Code: Select all

// in StepOneViewModel
masterWizardViewModel.nextStep(); // directly advances the wizard
< /code>
, das eine direkte Abhängigkeit zwischen untergeordneten und Master -VMs erstellt. Javafx Eigenschaftbindung [/b] 
Lassen Sie jeweils StepViewModel einen einfachen BooleanProperty DoneProperty () freilegen und lassen// StepOneViewModel.java
@Component
public class StepOneViewModel {
private final BooleanProperty done = new SimpleBooleanProperty(false);
public BooleanProperty doneProperty() { return done; }

public void completeStep() {
// your background Task succeeded…
done.set(true);
}
}

// WizardViewModel.java
@Component
public class WizardViewModel {
@Autowired
StepOneViewModel stepOneVm;

public void initialize() {
stepOneVm.doneProperty().addListener((obs, was, done) -> {
if (done) advanceTo(Step.TWO);
});
}

private void advanceTo(Step next) { /* … */ }
}
pros

Keine zusätzliche Feder-Boilerplate. /> cons < /strong> < /p>

WizardViewModel muss jedes StiefviewModel kennen und injizieren. /> 2. Spring ApplicationEvents

Veröffentlichen Sie ein Ereignis aus dem untergeordneten VM und lassen Sie WizardViewModel abonnieren:

Code: Select all

// StepCompletedEvent.java
public class StepCompletedEvent extends ApplicationEvent {
private final Step step;
public StepCompletedEvent(Object src, Step step) { super(src); this.step = step; }
public Step getStep() { return step; }
}

// StepOneViewModel.java
@Autowired ApplicationEventPublisher events;
public void completeStep() {
events.publishEvent(new StepCompletedEvent(this, Step.ONE));
}

// WizardViewModel.java
@Component
public class WizardViewModel {
@EventListener
public void onStepCompleted(StepCompletedEvent e) {
advanceTo(e.getStep().next());
}

private void advanceTo(Step next) { /* … */ }
}
Profis

Lose Kopplung - Publisher muss keine Abonnenten kennen. /> cons < /strong> < /p>

Mehr Boilerplate (Ereignisklasse + Hörer). /> Fragen < /strong> < /p>

Habe ich signifikante Kompromisse zwischen diesen beiden Mustern verpasst? oder gotchas sind Sie begegnet?>

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post