我有一個對象,讓我們把它的請求,有協會其他幾個對象,如:如何構建對象:面向對象,組成
Employee submitter;
Employee subjectsManager;
Employee pointOfContact;
而且幾個值的屬性,如字符串,日期和枚舉。
現在,我還需要跟蹤另一個對象,主題的,但是這可能是3種不同類型的人之一。爲了簡單起見,我們只談談兩種類型:員工和顧問。他們的數據來自不同的存儲庫,他們有不同的字段集,有些重疊。所以說,一個員工都有一個
String employeeName;
String employeeId;
String socialSecurityNumber;
而一個諮詢顧問
String consultantName;
String socialSecurityNumber;
String phoneNumber;
一個可怕的想法是,要求既有顧問和員工,以及SETSUBJECT(顧問)分配一個,SETSUBJECT(員工)分配另一個。這聽起來很糟糕。我的主要目標之一是避免「如果主題是這種類型,那麼這麼做......」的邏輯。
我的想法是,也許是EmployeeRequest和ConsultantRequest應該擴展的要求,但我不知道怎麼樣,比如說,SETSUBJECT會工作。我希望它是基類中的抽象方法,但我不知道簽名是什麼,因爲我不知道參數是什麼類型。
那麼從界面的角度來看它是有道理的。一個重要的接口是這些Request對象將被傳遞給我沒有的一個Web服務。我將不得不以有些複雜的方式映射對象的字段,部分有意義。對於像名稱和SSN這樣的字段,映射非常簡單,但許多不在所有類型的人員中排隊的字段都被轉儲到字符串AdditionalInfo字段(wump wump)中。所以他們都會有一個getAdditionalInfo方法,一個getName等,如果有任何字段不對齊,他們可以做一些特殊的事情。
因此,這讓我覺得Request本身不應該被子類化,而是可能包含一個ISubjectable(或其他)的引用,這些引用實現了通過webservice發送值所需的接口。這聽起來很體面,防止大量的「如果對象是僱員再這樣做......」
不過,我還是會時常需要訪問,只有特定類型的題目有更多的領域,例如在顯示屏或編輯頁面上,這樣可以讓我回到「如果主題是員工的實例,然後進入編輯員工頁面......」,這可能是不可避免的,但如果是這樣的話,我也可以。
只是爲了完整性,我會提辦法「所有可能的領域的聯盟」 - 不要以爲我不在乎做一個無論是。
界面方法是最明智的還是我對它的錯誤?謝謝。