在开发接口时,它们应该尽可能保持通用,还是应该尝试在接口中放置尽可能多的方法,属性以保持接口数量低:例如,哪个更好1或2:
1)客户和租赁拆分为2个接口(仅与租赁相关的数据在租赁界面中,仅与客户相关的数据在客户界面中)
interface ICustomer
{
public string Name { get; set; }
public string Address { get; set; }
public string Phone { get; set; }
public string Email { get; set; }
}
interface IRental: ICustomer
{
string Title { get; set; }
decimal Cost{ get; set; }
void Rent();
}
Run Code Online (Sandbox Code Playgroud)
2)将所有数据放入一个界面.
interface IRental
{
string Title { get; set; }
decimal Cost{ get; set; }
void Rent();
public string Name { get; set; }
public string Address { get; set; }
public string Phone { get; set; }
public string Email { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
关于第一种方法,扩展ICustomer接口是否有好处,或者IRental中是否只有ICustomer属性,如下所示:
interface IRental
{
ICustomer customer {get;set;}
string Title { get; set; }
decimal Cost{ get; set; }
void Rent();
}
Run Code Online (Sandbox Code Playgroud)
上述方法有哪些优点/缺点?并且有一种首选方式(一种更具可扩展性和可维护性).
研究SOLID 的接口隔离原理.胖接口可能存在问题,实施者和消费者被迫关心的事情超出了他们的需要.保持您的界面薄,高度集中.使用的示例通常是调制解调器的概念
interface Modem
{
void Dial();
void Hangup();
void Send();
void Receive();
}
Run Code Online (Sandbox Code Playgroud)
实施者Modem必须提供拨号和挂断的实现,这些是连接状态问题.然后提供发送和接收的实现,这些是数据传输问题.这些应该是两个独特的界面,它们是两个不同的责任组,也属于单一责任原则.并非所有调制解调器都需要这两套责任.