标签: interface-segregation-principle

接口隔离和单一责任原则的问题

我试图遵循接口隔离单一职责原则,但是我对如何将它们整合在一起感到困惑。

在这里,我有一个示例,其中有一些接口,我已将其拆分为更小、更直接的接口:

public interface IDataRead
{
    TModel Get<TModel>(int id);
}

public interface IDataWrite
{
    void Save<TModel>(TModel model);
}

public interface IDataDelete
{        
    void Delete<TModel>(int id);
    void Delete<TModel>(TModel model);
}
Run Code Online (Sandbox Code Playgroud)

我稍微简化了它(有一些where条款妨碍了可读性)。

目前我正在使用SQLite ,但是,这种模式的美妙之处在于,如果我选择不同的数据存储方法(例如Azure),它有望让我有机会更好地适应变化。

现在,我对每个接口都有一个实现,下面是每个接口的简化示例:

public class DataDeleterSQLite : IDataDelete
{
    SQLiteConnection _Connection;

    public DataDeleterSQLite(SQLiteConnection connection) { ... }

    public void Delete<TModel>(TModel model) { ... }
}

... 

public class DataReaderSQLite : IDataRead
{
    SQLiteConnection _Connection;

    public DataReaderSQLite(SQLiteConnection connection) { ... }

    public …
Run Code Online (Sandbox Code Playgroud)

c# interface single-responsibility-principle solid-principles interface-segregation-principle

6
推荐指数
2
解决办法
1623
查看次数

Qt中的接口隔离

我总是尝试应用SOLID原则,我真的很喜欢Qt工具包,但我发现自己一直都在使用单继承规则.

如果使用多重继承,则moc假定第一个继承的类是QObject的子类. 另外,请确保只有第一个继承的类是QObject.

如何组合QObject规则和接口隔离原则的单一继承.
我想用信号和插槽定义接口,但我不允许这样做.

你如何解决这个缺点?

qt interface solid-principles interface-segregation-principle

4
推荐指数
1
解决办法
584
查看次数

接口隔离原理用法

这种情况多次发生在我身上,我不知道如何解决它.

当一些接口实现不使用它的功能时,接口隔离原则是为了防止情况 - 这是显而易见的.通常情况下我有一个接口列表,我想用它们做一些事情.让我们看看没有ISP的例子:

  public interface IPerson
    {
           void Run();
           void Eat();
    }

public class AbcPerson : IPerson
{
       void Run(){};
       void Eat(){};
}

public class XyzPerson : IPerson
{
       void Run(){};
       void Eat(){};
}

List<IPerson> People {get;set;}
Run Code Online (Sandbox Code Playgroud)

而且我想和每个人一起跑.

      foreach(var person in People)
      {
         person.Run();
      }
Run Code Online (Sandbox Code Playgroud)

现在我想和所有人一起吃饭.

          foreach(var person in People)
          {
             person.Eat();
          }
Run Code Online (Sandbox Code Playgroud)

现在,如果我想使用ISP,我应该将代码更改为:

        public interface IRunnable
        {
               void Run();
        }
        public interface IEatable
        {
               void Eat();
        }

    public class AbcPerson : IRunnable,IEatable
    {
           void Run(){};
           void …
Run Code Online (Sandbox Code Playgroud)

c# convention interface-segregation-principle

2
推荐指数
1
解决办法
433
查看次数

如何通过实现adaptern模式来隔离胖接口?

假设我有一些胖接口,无法更改.而且我还有一些客户端类只想使用胖接口中的少数方法.如何针对这种情况实现适配器模式,实现接口隔离原则?

c# oop design-patterns adapter interface-segregation-principle

1
推荐指数
1
解决办法
839
查看次数