Il concetto di collegamento di oggetti e classi

-1

Questo non è tanto una revisione specifica del codice, ma una revisione concettuale quando si converte un diagramma di classe in codice e quindi eventualmente in un database, in Python. So come aggiungere cose a un database, ma l'ho sempre fatto direttamente con SQL dai moduli e non dalle classi, (che credo sia chiamato ORM)

Ho il seguente diagramma di classe

Hocreatoleseguenticlassiperabbinareildiagramma

classMember:def__init__(self):self.memid=0self.memname=""

  def addMember(self, memid, memname):
    self.memid = memid
    self.memname = memname

  def searchbyid(memid):
    return 0

  def searchbyname(memname):
    return 0

  def newcust(self, custid, custname):  
    self.custid = custid
    self.custname = custname

class Rental:

  def __init__(self):
    self.title = ""
    self.sartdate = ""
    self.enddate = ""
    self.cost = 0

  def addrental(self, title, startdate, enddate, cost):
    self.title = title
    self.startdate = startdate
    self.enddate = enddate
    self.cost = 0

class Movie:

  def __init__(self):
    self.movieID = 0
    self.title = ""
    self.genre = ""
    self.runtime = 0.0

  def newMovie(self, movieID, title, genre, runtime):
    self.movieID = movieID
    self.title = title
    self.genre = genre
    self.runtime = runtime

Dimentica la sintassi specifica (ad esempio, tipi di dati, best practice, ecc.) La mia domanda è: come faccio a far funzionare questi elementi per modellare lo scenario del mondo reale che ho? So che posso creare un membro come questo:

member = Member()
member.addMember(1, "John Sampson")

E so che posso creare un film come questo:

movie = Movie()
movie.newMovie(47, "Die Hard", "Action", 94.27)

Ma quando mi unisco a queste cose insieme per creare un noleggio, lo farei in questo modo?:

member.rental = Rental()
member.rental.addrental(movie.title, "07/02/2018", "18/02/2018", 10)

Le mie ulteriori domande sono:

Come faccio a collegare in modo specifico le classi come ho nel mio diagramma (1 membro che ha molti noleggi, ecc.) o il collegamento verrà creato solo quando i dati vengono passati a un database?

Come creo una funzione di ricerca membro? Sarebbe solo in grado di funzionare una volta che avessi un database installato e funzionante?

Nel mio esempio sopra, aggiungo Die Hard come il film che hanno noleggiato perché è l'unico per cui ho un oggetto. Tuttavia, nel mondo reale, potevano scegliere qualsiasi film, quindi presumo che dovrei cercare il film che hanno inserito e collegarlo da lì. Tuttavia, come dovrei cercare un film quando gli oggetti sono stati creati e prima che siano stati aggiunti al database? Dovrei aggiungere ogni oggetto a un elenco man mano che vengono aggiunti?

Mi sto bloccando concettualmente tra l'azione di creare classi semplici e il metodo per farle lavorare insieme in modo che sappiamo che un membro ha noleggiato questo video specifico e sappiamo che l'affitto era per questo film ecc.

    
posta user1480135 19.04.2018 - 11:44
fonte

1 risposta

2

Devi avere un ID per il noleggio. Un membro potrebbe affittare nuovamente lo stesso film e quindi la coppia (movieID, memberID) non identifica un affitto.

Penso che dovresti trattare Rental come una radice aggregata indipendente. In pratica ciò significa che non hai riferimenti diretti agli oggetti tra film, membri e noleggi. Invece un noleggio conosce l'ID del film e l'ID del membro coinvolto.

I film e i membri non hanno bisogno di riferimenti agli Affitti. Dovresti essere in grado di scrivere la funzionalità di registrare e sfogliare film e membri senza nemmeno pensare a Noleggi.

Se il tuo sistema riguarda il noleggio di copie fisiche di film, allora i membri non stanno esattamente noleggiando film ma copie. Esiste una relazione 1: N tra film e copie.

Inoltre, sul "costo galleggiante": usa i decimali invece dei numeri mobili binari per soldi. Hai bisogno di valori decimali precisi lì.

How would I create a member search function? Would this only be able to work once I had a database up and running?

Potresti sempre scrivere un MemberRepository che funziona in memoria invece di connettersi a un database.

In my example above, I add Die Hard as the movie they rented because it's the only one I have an object for. However in the real world, they could choose any movie, so I assume I would have to search for the movie they entered and then link it from there.

Nel mondo reale l'utente (un membro) vede un elenco di film. Il sistema conosce gli ID di quei film. Il sistema conosce anche l'ID del membro. Quando l'utente sceglie di noleggiare un film, il back-end ottiene l'ID del film e l'ID del membro come parametri. Non è necessario cercare il film per nome o altro.

    
risposta data 19.04.2018 - 13:04
fonte

Leggi altre domande sui tag