Принципы в C# - часть 5. Принцип разделения интерфейса
Принцип разделения интерфейсов (ISP) гласит:
Клиент не должен реализовывать интерфейсы, которые не нужны приложению.
Другими словами, желательно, чтобы вместо одного большого интерфейса разработчик создавал меньшие, более управляемые интерфейсы.
Допустим, перед нами стоит задача создать игру про роботов, для начала мы проектируем наш интерфейс:
public interface IRobot
{
string Name { get; set; }
void Walk();
void Fly();
void Attack();
}
Идеальный! Мы создали наш контракт о том, что делает робота... что нарушает принцип разделения интерфейса, потому что не все роботы могут Walk
, Fly
или Attack
.
public class FriendlyRobot : IRobot
{
public string Name { get; set; }
public void Walk()
{
// Code
}
public void Fly()
{
Console.WriteLine("This robot can't fly!");
}
public void Attack()
{
Console.WriteLine("This robot can't attack!");
}
}
Чтобы решить эту проблему, нам нужно разбить интерфейсы на более мелкие:
public interface IRobot
{
string Name { get; set; }
}
public interface IWalkable
{
void Walk();
}
public interface IFlyable
{
void Fly();
}
public interface IAggressive
{
void Attack();
}
Теперь мы можем создать робота так, как мы хотим, без реализации лишнего кода, который не нужен, поэтому наш FriendlyRobot
будет реализован по-другому:
public class FriendlyRobot : IRobot, IWalkable
{
public string Name { get; set; }
public void Walk()
{
// Code
}
}
Только полноправные пользователи могут оставлять комментарии. Аутентифицируйтесь пожалуйста, используя сервисы.