È la parola chiave 'sincronizzato' in un'applicazione enterprise classico sospetto?
-
09-09-2019 - |
Domanda
Sto parlando di applicazioni aziendali classiche. Tipicamente ospitato in un certo tipo di applicazione-server o contenitore. Niente di speciale, solo le entità, i servizi, Presentazione / UI e lo stoccaggio relazionale.
Ogni volta che vedo la parola synchronized
(sia sui metodi o per blocchi) in una tale applicazione ottengo molto sospetto.
A mio parere questo è sia un segno per non aver capito i concetti architetturali di base (ad esempio, che un modello di dominio non è condivisa tra diversi client) o peggio ancora un segno che l'architettura è in realtà molto pasticciato.
Lei condivide la mia mentalità qui? O sto completamente fuori strada? Avete casi d'uso in cui è realmente necessario, la sincronizzazione in un'applicazione enterprise classico?
Soluzione
Sono d'accordo con te per il codice della logica di business, ma in un'applicazione enterprise hai anche sigla tecnica ed a volte avete bisogno di qualche sincronizzazione per stato condiviso 'tecnica'. La parola chiave sincronizzato può essere utilizzato per questo. (È anche possibile trasmettere sulla variabile atomica, o utilizzare qualcosa al di fuori l'applicazione come una sequenza di DB per condividere lo stato tecnico ...)
Se si desidera creare disegno di legge numero sequenziale - senza buchi nella sequenza - è necessario un modo per condividere qualche stato, e un modo per sincronizzare ...
Altri suggerimenti
Sono d'accordo con te.
Credo che la sincronizzazione è importante quando si progettano componenti thread-safe, ma non è normalmente necessario in codice "business logic".
Con l'introduzione di stato condiviso è possibile aumentare le prestazioni, ma si stanno diminuendo la scalabilità dell'applicazione per il futuro.
Se una progettazione simultanea è necessario può essere gestito in modo trasparente allo sviluppatore di applicazioni, per esempio utilizzando un application server.