哪种类设计更好,为什么?
public class User
{
public String UserName;
public String Password;
public String FirstName;
public String LastName;
}
public class Employee : User
{
public String EmployeeId;
public String EmployeeCode;
public String DepartmentId;
}
public class Member : User
{
public String MemberId;
public String JoinDate;
public String ExpiryDate;
}
Run Code Online (Sandbox Code Playgroud)
要么
public class User
{
public String UserId;
public String UserName;
public String Password;
public String FirstName;
public String LastName;
}
public class Employee
{
public User UserInfo;
public String EmployeeId;
public String EmployeeCode;
public String DepartmentId;
}
public class Member
{
public User UserInfo;
public String MemberId;
public String JoinDate;
public String ExpiryDate;
}
Run Code Online (Sandbox Code Playgroud)
180*_*ION 53
通过认识到继承模型是"IS-A"关系,而成员模型是"HAS-A"关系,可以简单地回答这个问题.
哪一个是正确的?这是你的答案.
Bra*_*son 18
我不喜欢任何一个.当某人既是会员又是员工时,会发生什么?
wil*_*ell 15
问自己以下几点:
通常,在代码复杂性和所需效率的约束下,努力模拟程序模拟的现实.
lia*_*nan 12
我认为组合总是比继承更好(通常).如果员工和会员真的是用户,并且他们互相排斥,那么第一个设计就更好了.考虑您需要访问Employee的UserName的场景.使用第二种设计,您将拥有:
myEmployee.UserInfo.UserName
Run Code Online (Sandbox Code Playgroud)
哪个是坏的(得墨忒耳法则),所以你会重构为:
myEmployee.UserName
Run Code Online (Sandbox Code Playgroud)
这需要Employee上的一个小方法委托给User对象.第一种设计避免了所有这些.
mac*_*llt 12
尼斯问题,虽然避免分心关于正确和错误的我会考虑要求每种方法的利弊-我认为这是你的意思的是好还是坏,为什么.无论如何....
优点:
缺点:
优点:
缺点:
这些列表+ Jon Limjap提到的问题将帮助您做出决定并开始 - 然后您可以找到正确答案应该是什么;-)
真正的问题是:
这些可以是三个完全不相关的实体,也可以不是,这将决定您的第一个或第二个设计是否有效,或者是否有其他完全不同的设计.