2013-03-07 37 views
1

我需要一些指導,然後再花幾個小時進行重組,然後發現這不是一個很好的方法。我的課程是針對學區的一對一倡議。我有一個所有任務,學生和電腦的數據庫。我正在構建一個面向對象的設計,以使編碼更加統一(以及所有其他優點)。此應用程序將用於指導用戶完成重啓和筆記本電腦檢查過程。這是我的困境。1到OOP中的很多關係php

學生(對象)可以有一個或兩個當前的任務(一個是另一個永久性的借用者)。我最初建立了一個學生對象,一個賦值對象和一個設備對象。然後,在創建學生時,我們使用查找工廠來查找學生未完成的當前作業。然後,我從學生構造中循環這些內容,並創建一個賦值對象數組,每個賦值對象查找設備信息。

這很好,並獲得我需要的所有信息,但我發現很難處理,因爲有一個賦值對象的數組,並有一定的規則遵循邏輯。

必須先打開租借者分配(在原始計算機發送問題時給出的分配)。而且,一般來說,很難確定此數組中的哪個賦值對象具有我需要知道的屬性。

因此,我的IDEA(這可能不是一個好主意)就是將其分解爲1對1對1對1的關係。學生分配到設備的分配。

然後,如果我需要知道,如果學生有一個借用的任務,我可以做一個函數內部的分配對象,然後調用student->assignments->hasLoanerAssignment()

你怎麼看網上?

回答

1

如果我正確理解你的意思,你就是說貸方分配不同於永久性分配,而且這會導致併發症。如果是這樣,那麼你可能想要使用繼承。 Loaner和permananent assigments將是兩種類型的Assignment,你可以給他們自己的屬性和方法。

class Assignment 
{ 
    // instance of Device 
    protected $device 

    // instance of Student 
    protected $student 
} 

class LoanerAssignment extends Assignment 
{ 
    // various properties and methods relevant to loan 
} 
class PermanentAssignment extends Assignment 
{ 
    // various properties and methods relevant to permanent 
} 

假設你保持這個數據庫中的數據,使對貸款人及永久單獨的表,然後它會很容易的方法添加到學生,看它是否有一個貸款人的分配,如:

// in Student class 
function hasLoanerAssignment() 
{ 
    return 1 === $yourChosenDBAdaptor->getCountOfLoanerAssignents($this->_studentId); 
} 
+0

謝謝你的迴應。我不能改變數據庫模式而不會破壞已經在生產中的其他程序。賦值表包含所有的賦值,並且有一個名爲'loaner'的字段,它是boolean(tiny int)來表示一個Loaner賦值或一個永久賦值。 – Bil1 2013-03-07 16:57:15

+0

真的沒關係。您仍然可以在PHP級別使用繼承。 – naomi 2013-03-07 19:27:32

+0

是的,這是事實。我認爲這是一個可接受的解決方案。然後我會在學生對象中存儲布爾函數,如hasLoanerAssignment和hasPermanentAssignment,它會檢查$ loaner和$ permanent是否爲空。謝謝 – Bil1 2013-03-07 19:37:56