我试图遵循接口隔离和单一职责原则,但是我对如何将它们整合在一起感到困惑。
在这里,我有一个示例,其中有一些接口,我已将其拆分为更小、更直接的接口:
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
我总是尝试应用SOLID原则,我真的很喜欢Qt工具包,但我发现自己一直都在使用单继承规则.
如果使用多重继承,则moc假定第一个继承的类是QObject的子类. 另外,请确保只有第一个继承的类是QObject.
如何组合QObject规则和接口隔离原则的单一继承.
我想用信号和插槽定义接口,但我不允许这样做.
你如何解决这个缺点?
qt interface solid-principles interface-segregation-principle
这种情况多次发生在我身上,我不知道如何解决它.
当一些接口实现不使用它的功能时,接口隔离原则是为了防止情况 - 这是显而易见的.通常情况下我有一个接口列表,我想用它们做一些事情.让我们看看没有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# oop design-patterns adapter interface-segregation-principle