Wir finden dieses Szenario oft in unseren täglichen Codes. Wir wollen prüfen, ob ein bestimmter Datensatz in db existiert, wenn dies der Fall ist, nichts tun, aber wenn der Datensatz fehlt, Maßnahmen ergreifen und dann den Datensatz einfügen.Von der Perspektive der Leistung abfangen duplicatekeyException besser als zu prüfen, ob Datensatz zuerst
z.B. Beim Senden einer Push-Benachrichtigung möchten wir nur eine Benachrichtigung senden, wenn sie noch nicht gesendet wurde.
Wir könnten den Code zwei Möglichkeiten
Prüfen Sie zuerst, ob notificationSent schreiben
boolean notificationSent = notificationDao.checkNotificationId(notificationId);
if(notificationSent){
return;
}
else{
//send notification
notificationDao.insertNotification(notificationModel);
}
Der andere Weg mit Try-Catch
try{
notificationDao.insertNotification(notificationModel);
//send notification
}
catch(DuplicateKeyException e){
// log and do nothing
}
Im zweiten Fall wäre, wenn wir Ausnahme erhalten, während Wenn wir die aktuelle Benachrichtigung senden, rollen wir einfach die Einfügung zurück. und so sind der erste und der zweite Ansatz nicht funktional verschieden.
Aber im ersten Fall werden 2 db-Aufrufe gemacht, während wir im zweiten Fall einen db-Aufruf speichern. Ist es insgesamt ein besserer Ansatz?