Ho una serie di modelli ORM condivisi tra l'applicazione aziendale principale e un paio di applicazioni secondarie (come un'interfaccia web amministrativa).
Non voglio mettere la logica di business dell'oggetto per l'applicazione principale all'interno delle classi del modello ORM perché l'interfaccia web non ne usa nessuna (e sarebbe troppo gonfia).
Questo mi lascia il problema di avere due classi per ogni "oggetto" reale (la classe del livello aziendale e la classe del modello ORM) e mi chiedo come dovrei collegare i due. Sia la composizione che l'ereditarietà funzionerebbero, ma entrambi si sentono sbagliati . Ad esempio, ho una classe utente e una classe modello ORM DBUser. L'utente "non è" un DBUser e un utente "non ha" un DBUser.
Esiste una soluzione standard o una procedura ottimale per affrontare questa situazione? O è un caso in cui non c'è una grande risposta e devo solo scegliere quella che mi rende meno a disagio?
Ecco un esempio di codice, nel caso in cui quanto sopra non fosse chiaro:
class DBUser(SQAlchemyBase):
__tablename__ = 'users'
user_id = Column(Integer, primary_key=True)
username = Column(String, nullable=False)
# ...
class User(object):
def __init__(self, user_id):
self.dbuser = db.query(DBUser).filter(DBUser.user_id == user_id).first()
@property
def username(self):
return self.dbuser.username
@username.setter
def username(self, username):
self.dbuser.username = username
def connect_to_server(self, server):
...
def save(self):
db.add(self.dbuser)
db.commit()
db.detach(self.dbuser)
def disconnect_from_server(self):
...
def handle_incoming_action(self, action):
...