Ich erstelle eine Rest-API mit Spring Boot und verwende die Ruhezustandsüberprüfung, um Anforderungseingaben zu überprüfen.
Ich benötige aber auch andere Arten der Validierung, zum Beispiel, wenn Aktualisierungsdaten überprüft werden müssen. Wenn die Firmen-ID nicht vorhanden ist, möchte ich eine benutzerdefinierte Ausnahme auslösen.
Sollte sich diese Validierung auf der Service-Ebene oder der Controller-Ebene befinden?
Serviceschicht:
public Company update(Company entity) {
if (entity.getId() == null || repository.findOne(entity.getId()) == null) {
throw new ResourceNotFoundException("can not update un existence data with id : "
+ entity.getId());
}
return repository.saveAndFlush(entity);
}
Controller-Schicht:
public HttpEntity<CompanyResource> update(@Valid @RequestBody Company companyRequest) {
Company company = companyService.getById(companyRequest.getId());
Precondition.checkDataFound(company,
"Can't not find data with id : " + companyRequest.getId());
// TODO : extract ignore properties to constant
BeanUtils.copyProperties(companyRequest, company, "createdBy", "createdDate",
"updatedBy", "updatedDate", "version", "markForDelete");
Company updatedCompany = companyService.update(company);
CompanyResource companyResource = companyAssembler.toResource(updatedCompany);
return new ResponseEntity<CompanyResource>(companyResource, HttpStatus.OK);
}
quelle
Ruhezustandsüberprüfungen sind Überprüfungen der Integrität der Daten. Um RuntimeExceptions von bbdd zu vermeiden. Es sind so ziemlich die gleichen Validierungen, die Sie mit Constrains steuern sollten . Da nur die Business - Schicht sollte Fütterung werden die Persistenz - Schicht, können Sie (oder auch nicht, bis zu Ihnen) vertrauen auf die Richtigkeit der Daten , die von Ihrer Business - Schicht kommt
Ich schreibe keine Validierungen in DAOs. Ich erwarte gültige Daten aus den oberen Schichten. Im Falle eines Fehlers delegiere ich die Verantwortung für die Kenntnis des Inhalts an den BBDD.
Dann folgen Validierungen auf der Business-Ebene. Bei allen Geschäftsvalidierungen stand die Kohärenz der Daten im Vordergrund, nicht deren Integrität .
Schließlich mache ich vorherige Überprüfungen auf der Kontrollebene. Diejenigen, die nur mit einer solchen Schicht zusammenhängen.
Sie werden bald sehen, welche Validierungen in der Business-Schicht implementiert werden sollen. Am häufigsten: ID-Kontrolle. Dieser kann problemlos auf beiden Ebenen implementiert werden. Wenn Sie davon ausgehen, dass viele Controller oder Clients Ihre Business-Schicht verbrauchen, ist dies ein hervorragender Kandidat für die Business-Schicht, anstatt überall dieselbe Validierung zu wiederholen.
Manchmal haben Controller ihre eigenen Regeln und Bedingungen, die in keiner anderen Fassade reproduziert werden können. Dann ist es ein Kandidat, in eine solche Steuerung eingesetzt zu werden.
Überlegen Sie, wofür Sie validieren und ob Sie es für alle anwenden möchten, egal was passiert. Oder wenn es sich um eine kontextbezogene Validierung handelt ("Ich validiere etwas, das nur an einer bestimmten Steuerungs- / Ansichtsfassade passiert).
quelle
In unserem Java-Shop haben wir die Überprüfung von Web-Widgets absichtlich auf drei separate Vorgänge aufgeteilt.
Wenn Schicht 1 ausfällt, werden 2 oder 3 nicht überprüft. Wenn 1 erfolgreich ist und 2 fehlschlägt, wird 3 nicht überprüft. Dadurch werden keine falschen Fehlermeldungen generiert.
Sie fragen bei einem REST-Aufruf nach Werten und nicht nach Widget-Inhalten, es gelten jedoch dieselben Prinzipien.
quelle
Probefahrten schatten ein Licht auf diese, schließlich gibt es keinen Controller und Sie müssen eine andere Option wählen. Offensichtlich sollten sich die Geschäftsregeln an einer Stelle befinden, und dies ist eine weitere Einschränkung in Ihrer Entscheidung.
quelle