我有一个对象,让我们把它的请求,有协会其他几个对象,如:如何构建对象:面向对象,组成
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发送值所需的接口。这听起来很体面,防止大量的“如果对象是雇员再这样做......”
不过,我还是会时常需要访问,只有特定类型的题目有更多的领域,例如在显示屏或编辑页面上,这样可以让我回到“如果主题是员工的实例,然后进入编辑员工页面......”,这可能是不可避免的,但如果是这样的话,我也可以。
只是为了完整性,我会提办法“所有可能的领域的联盟” - 不要以为我不在乎做一个无论是。
界面方法是最明智的还是我对它的错误?谢谢。