Token interface that implements two or more other interfaces

Is it good practice or bad practice to write an interface that exists solely to concentrate other interfaces?

interface InterfaceA : InterfaceB, InterfaceC {
}

In this particular implementation, you need to implement InterfaceAwhat seems good, but it does not add any value, expanding what seems wasteful.

+3
source share
4 answers

I think it depends on whether that makes sense in your domain. If this happens, I will do it, then your program will more accurately model your domain.

, , , / , InterfaceA, .. ; .

+2

, , .

, InterfaceB IntefaceC , InterfaceA...

+1

, A, B C.

+1

, - . - , , .

-, , , , - , , SO Scott Wisniewsi ( ) , .

MSDN, CA1040, , , t .

- , , , Microsoft - - , , ( , ), MS ' . ", ".

, , , " " , , :

public interface IReadsAResource
{
  public byte[] Read(string id);
}

public interface IWritesAResource
{
  //returns the id
  public string Write(byte[] resource);
}

, , , :

public class NeedsRead
{
  private readonly IReadsAResource Reader;
  public NeedsRead(IReadsAResource reader){ Reader = reader; }
}

public class NeedsWrite
{
  private readonly IWritesAResource Writer;
  public NeedsWrite(IWritesAResource writer){ Writer = writer; }
}

, , ResourceReaderWriter, , , , , - :

var needsRead = new NeedsRead(new ResourceReaderWriter(/* dependencies */));
var needsWrite = new NeedsWriter(new ResourceReaderWriter(/* dependencies */));

, , ? :

public class NeedsReadAndWrite{
  public NeedsReadAndWrite(IReadsAResource reader, IWritesAResource writer){
    /* reader/writer local variables elided */
  }
}

, , :

  • , , ; , . , .
  • , , , , , . .

, , , :)

, :

//denotes a component that can both read and write
public interface IReadsAndWritesAResource : IReadsAResource, IWritesAResource
{

}

public class NeedsReadAndWrite{
  public NeedsReadAndWrite(IReadsAndWritesAResource readerWriter){
    /* local variable assignment elided */
  }
}

.

, , .

, , , , , .

+1
source

Source: https://habr.com/ru/post/1770523/


All Articles