When data entry applications work on a schema with complex constraints, it is typically necessary to use dialog windows (i.e. "forms") which allow the user to edit temporary/transient variables before a transaction is submitted to the database when they press an "apply" button.
This is because constrained variables cannot be edited in-place.
The very fact that dialog windows are used to make updates, rather than allow for editing the data in-place, tends to mean application code needs to implement both a read-only viewer and an editor.
The viewer and editor are coded separately because they look and behave differently. Furthermore the viewer accesses the constrained variables in the database whereas the editor accesses unconstrained temporary variables (which typically are transient, but with added complexity can be persistent).
Regardless of whether an editor is in-place or not, it must validate the input and provide feedback to the user about errors, preferably in real time. For example data entry in forms requires application code to be written to validate the data entry.
Out-of-place editing of data tends to be inconvenient for users:
It's also inconvenient for application developers, because it creates extra complexity:
Form form = Forms.getForm("NewCustomer"); Form.Errors errors = null; do if (form.edit(errors)) errors = form.submit(); while (errors != null);This concept isn't needed with in-place data entry
The conventional approach might work with something simple, like inserting customer records. But what happens when multiple users are doing something more complicated, such as editing a model of a car engine?