我对对象建模感到困惑,我将使用一个简单的借阅库项目进行说明。
图书馆有书(每本书一本,以保持简单)和顾客。如果该书不借给另一位赞助人,顾客可以借书。
这需要3个班级,Book,Patron和Loan。
图书将有一个ID和一个名字。赞助人将有一个id和名字。贷款将有id,book_id,patron_id和贷款日期。
贷款和退货方式将在何处定义?这是书籍,赞助人或贷款对象的方法吗?
书籍是登陆的人,赞助人是借书的人,贷款是保留特定贷款业务的所有细节的人。
为什么真正需要贷款课程?当然,上面提到的字段需要DB表,但是从MVC框架的角度来看(例如:Symfony或Rails)应该将它定义为模型吗?
我知道这是一个简单而且已经解决的问题,但是在与oop设计长时间脱节之后,我并不能正确地“查看”这个问题!
答案 0 :(得分:2)
创建一个负责创建Loan对象的类。您可以调用此LoanCreator,或者如果您以下列方式考虑它有助于您将其称为图书管理员。您可以将这个新类传递给Book和Patron对象,它会为您创建贷款。通常,如果您发现自己不确定某个方法是否属于某个特定类,那么也许是时候考虑创建一个新类了。
答案 1 :(得分:1)
在我看来,你需要2个班级
和
loan
和return
方法应该进入Book
课程,因为这些操作正在发生在书籍上。但正如你所说,应该有一个不同的贷款表来保存这些记录。
回到MVC时,它们应该作为模型实现。