I'm currently having trouble wrapping my head around the MVC design pattern and how to structure my models. As far as I understand, the model file in MVC would be how one interacts with the database and retrieves information from it, where one model file would be equivalent to one database table, i.e. a User table in my PostgreSQL database would correlate with a user.js file in my project/model/ folder where the user.js would contain the class associated with the model and it's methods such as findAll, findById, etc functions.
Say for instance I have two tables: customer and purchase, such that:
customer:
| customer_id (PRIMARY KEY) | customer_name | customer_email |
| --------------------------| --------------| ---------------|
| 1 | John | john@j |
| 2 | Ben | ben@b |
purchase:
| purchase_id (PRIMARY KEY) | purchase_item | purchase_outstanding | purchase_customer_id (FOREIGN KEY) |
| ------------------------- | ------------------| -------------------- | ---------------------------------- |
| 10 | Mercedes S-Class | 999 | 2 |
| 11 | Volkswagen Golf | 21398 | 1 |
| 12 | Volkswagen Beetle | 9812 | 1 |
| 13 | Ford Fiesta | 3921 | 2 |
| 14 | Ford Ranger | 1000 | 2 |
And my query:
SELECT purchase.purchase_id, purchase.purchase_oustanding, customer.customer_name
FROM purchase
INNER JOIN customer
ON purchase.purchase_customer_id = customer.customer_id
ORDER BY purchase.purchase_outstanding DESC;
My questions:
- Almost all examples of MVC I've seen employ methods that only query one table, such as a
findAll()function in thepurchase.jsfile which queries for all rows in thepurchasetable. Is it bad design for a model to have a method that's able to query other tables other than it's own such as the above query? - Is it poor design to create a single method/function in my
purchase.jsfile such asfindOutstandingDesc()SOLELY for the above query? Or would it be better to chain methods defined in other models? - Do I necessarily have to define my table schema as classes in the model file (such as having a Purchase class with attributes like purchase_id, purchase_item, etc), or can I just create a bunch of functions inside the file and export them from it?
Thank you!
Aucun commentaire:
Enregistrer un commentaire