Separazione della logica aziendale e dell’accesso ai dati in django

| | | | | |

Sto scrivendo un progetto in Django e vedo che l'80% del codice è nel file models.py. Questo codice crea confusione e, dopo un certo tempo, smetto di capire cosa sta realmente accadendo.

Ecco cosa mi dà fastidio:

  1. Trovo brutto che il mio modello level (che avrebbe dovuto essere responsabile solo del lavoro con i dati di un database) è anche l'invio di e-mail, il passaggio dall'API ad altri servizi, ecc.
  2. Inoltre, trovo inaccettabile inserire la logica aziendale in vista, perché in questo modo diventa difficile da controllare. Ad esempio, nella mia applicazione ci sono almeno tre modi per creare nuove istanze di Utente, ma tecnicamente dovrebbe crearle in modo uniforme.
  3. Non sempre mi accorgo quando i metodi e le proprietà dei miei modelli diventano non deterministiche e quando sviluppano effetti collaterali.

Ecco un semplice esempio. All'inizio, il modello User era così:

class User(db.Models): def get_present_name(self): return self.name o "Anonymous" def activate(self): self.status = "activated" self.save() 

Nel tempo, si è trasformato in questo:

class User(db .Models): def get_present_name(self): # la proprietà è diventata non deterministica in termini di database # i dati sono presi da un altro servizio da api return remote_api.request_user_name(self.uid) o "Anonymous" defactivate(self): # metodo ora ha un effetto collaterale (invia messaggio all'utente) self.status = "activated" self.save() send_mail("Il tuo account è attivato!", "‚Ķ", [self.email]) 

Quello che voglio è separare le entità nel mio codice:

  1. Entità del mio database, livello di persistenza: quali dati conserva la mia applicazione?
  2. Entità della mia applicazione, livello di logica aziendale: cosa fa la mia applicazione?

Quali sono le buone pratiche per implementare tale n approccio che può essere applicato in Django?

Separazione della logica aziendale e dell'accesso ai dati in django __del__: Questions

Separazione della logica aziendale e dell'accesso ai dati in django find: Questions

Shop

Best laptop for Fortnite

$

Best laptop for Excel

$

Best laptop for Solidworks

$

Best laptop for Roblox

$

Best computer for crypto mining

$

Best laptop for Sims 4

$

Best laptop for Zoom

$499

Best laptop for Minecraft

$590

Latest questions

NUMPYNUMPY

psycopg2: insert multiple rows with one query

12 answers

NUMPYNUMPY

How to convert Nonetype to int or string?

12 answers

NUMPYNUMPY

How to specify multiple return types using type-hints

12 answers

NUMPYNUMPY

Javascript Error: IPython is not defined in JupyterLab

12 answers

News

Wiki

Python OpenCV | cv2.putText () method

numpy.arctan2 () in Python

Python | os.path.realpath () method

Python OpenCV | cv2.circle () method

Python OpenCV cv2.cvtColor () method

Python - Move item to the end of the list

time.perf_counter () function in Python

Check if one list is a subset of another in Python

Python os.path.join () method