java - GWT Editors framework-ListEditor, eliminación de elementos, violación de MVP
gwt-editors (1)
Cualquiera de los dos enfoques está bien.
MVP no está escrito en piedra (ni siquiera está definido, fue acuñado por Martin Fowler pero retiró el término a favor de dos patrones más específicos), por lo que solo estás violando las reglas que te diste. Dicho de otro modo, se puede considerar que el marco Editor en su totalidad viola MVP: cada editor conoce el modelo, no necesariamente la instancia exacta que está editando (como con ValueAwareEditor
o LeafValue
), pero al menos el tipo de objetos del que es editor.
FYI, lo hacemos usando índices. Es más importante que esté garantizado que "se ve bien" (aunque obviamente es mejor si también se ve bien).
public class PersonListEditor extends Composite implements IsEditor<ListEditor<Person, PersonListItemWidget>> {
private static PersonListEditorUiBinder uiBinder = GWT.create(PersonListEditorUiBinder.class);
interface PersonListEditorUiBinder extends UiBinder<Widget, PersonListEditor> {}
private class Source extends EditorSource<PersonListItemWidget> {
@Override
public PersonListItemWidget create(int index) {
PersonListItemWidget widget = new PersonListItemWidget();
panel.insert(widget, index);
return widget;
}
}
@UiField VerticalPanel panel;
private ListEditor<Person, PersonListItemWidget> editor = ListEditor.of(new Source());
public PersonListEditor() {
initWidget(uiBinder.createAndBindUi(this));
}
@Override
public ListEditor<Person, PersonListItemWidget> asEditor() {
return editor;
}
}
PersonListItemWidget
tiene un botón Eliminar y cuando se hace clic en este botón, necesito eliminar el elemento relacionado de la lista.
Puedo hacer que
PersonListEditor
escuche las notificaciones del widget del elemento (como "se hace clic en mi botón Eliminar"), pero en este caso, solo tendré una referencia al widget y no un objetoPerson
real que realmente necesite. También puedo agregar algo de lógica para obtener el índice del widget relacionado de la lista de elementos del panel y luego obtener el objetoPerson
por ese índice, pero eso se ve horrible.Puedo hacer que mi
PersonListItemWidget
sea unValueAwareEditor
, por lo que cada widget conocerá suPerson
, pero toda la idea deValueAwareEditor
parece una violación de MVP, ya que Google dice que la capa de View no debe conocer el modelo y solo debería ser "botones". "y" etiquetas ".
¿Cuál es el enfoque correcto aquí?