java gwt mvp gwt-editors

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.

  1. 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 objeto Person 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 objeto Person por ese índice, pero eso se ve horrible.

  2. Puedo hacer que mi PersonListItemWidget sea ​​un ValueAwareEditor , por lo que cada widget conocerá su Person , pero toda la idea de ValueAwareEditor 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í?