接口应尽可能保持通用吗?

Xai*_*oft 4 c# oop interface

在开发接口时,它们应该尽可能保持通用,还是应该尝试在接口中放置尽可能多的方法,属性以保持接口数量低:例如,哪个更好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)

上述方法有哪些优点/缺点?并且有一种首选方式(一种更具可扩展性和可维护性).

Ant*_*ram 8

研究SOLID 的接口隔离原理.胖接口可能存在问题,实施者和消费者被迫关心的事情超出了他们的需要.保持您的界面薄,高度集中.使用的示例通常是调制解调器的概念

interface Modem
{
     void Dial();
     void Hangup();
     void Send();
     void Receive();
}
Run Code Online (Sandbox Code Playgroud)

实施者Modem必须提供拨号和挂断的实现,这些是连接状态问题.然后提供发送和接收的实现,这些是数据传输问题.这些应该是两个独特的界面,它们是两个不同的责任组,也属于单一责任原则.并非所有调制解调器都需要这两套责任.


Woj*_*teq 5

你应该始终考虑单一责任原则.类,方法和接口应该是特定于域的项.所以恕我直言,最好将ICustomer和IRental分开.