Note
I pattern architetturali definiscono metodologie per la creazione di applicazioni e sistemi software. Sono spesso alla base di framework. Permettono di:
- Separare modello e “view”.
- Gestire la comunicazione tra i diversi livelli logici di un sistema.
Model-View-Controller
Note
Il pattern Model-View-Controller (MVC) suddivide lo sviluppo in tre componenti:
Model: contiene lo stato e la logica applicativa e non ha dipendenze con altri componenti.View: contiene la logica di visualizzazione delModel, può avere un riferimento alModel.Controller: riceve gli input degli utenti inoltrati dallaView, modifica poiModeleView.Ne esistono diverse variazioni.
Di seguito un grafico rappresentante la sua struttura:
class Calculator extends CalculatorObservable {
float result = 0;
String expression = "";
private void compute() {
// ...
notifyAll();
}
private float power() {
// ...
}
private float factorial() {
// ...
}
public float getResult() {
return result;
}
}
class CalculatorController implements onClickListener {
ComputeButton button;
Calculator calculator = new Calculator();
public void setComputeButton(ComputeButton button) {
this.button = button;
this.button.addOnClickListener(this);
}
public void onClick() {
calculator.compute();
}
// ...
}
class ComputeButton extends Button {
// Riceve input utente
}
class ResultTextField extends TextField implements CalculatorListener {
Calculator calc;
public ResultTextField(Calculator c) {
calc = c;
c.addObserver(this);
}
public void updateResult() {
setText(String.valueof(calc.getResult()));
}
}Model-View-Presenter
Model-View-Presenter (MVP) è come la MVC, tuttavia non ha dipendenze sul modello. La comunicazione Controller-View avviene con interfacce:
Model: contiene lo stato e la logica applicativa e non ha dipendenze con altri componenti.View: contiene la logica di visualizzazione, propaga gli eventi alPresenter.Presenter: riceve gli input degli utenti inoltrati dallaView, modifica il modello e laView.
Model-View-ViewModel
Model-View-ViewModel (MVVM), come MVP, riduce ulteriormente le dipendenze tra livelli.
Model: contiene lo stato e la logica applicativa e non ha dipendenze con altri componenti.View: non contiene logica, di solito è create con linguaggi dichiarativi.ViewModel: non ha riferimenti allaViewné ad interfacce relative. Prepara un insieme di dati (solitamente primitivi) pensati per la visualizzazione (observable), esponendo metodi per reagire agli input degli utenti.Contiene anche dei data binding, cioè un insieme di componenti dedicati a collegare
VieweViewModel(solitamente forniti da un framework). L’utente nella definizione della view può sottoscriversi ad un specificoViewModele ai relativi dati.


