Интересно, какова лучшая практика в C # в отношении изменяемых / неизменяемых интерфейсов.
Мне нравится работать только с интерфейсами вместо реальных объектов;удалить зависимости и облегчить тестирование.
Я также обычно выставляю интерфейс только для чтения, что уменьшает количество ошибок.однако это создает проблему в реальном коде, когда мне нужно что-то изменить в экземпляре объекта.
Вот что я пытаюсь сделать
public interface ISomething
{
string Name { get; }
}
public interface IMutableSomething : ISomething
{
string Name { get; set; }
}
...
public class ConsumerClass
{
//Note that I'm working against the interface, not the implementation
public void DoSomethingOnName(ISomething o)
{
var mutableO = (IMutableSomething) o;
mutableO.Name = "blah";
}
}
Работая таким образом, я могу легко протестировать ConsumerClass и разорвать любую зависимость между ISomething и его реализацией
Я знаючто я мог бы привести интерфейс к реализации, но это привело бы к зависимости от реальной реализации.
Я мог бы сделать что-то вроде ниже, но я нахожу это уродливым и раздражающим
public interface IMutableSomething : ISomething
{
void SetName(string newName)
}
or
public interface IMutableSomething // No inheritance, implementation impl. 2 interfaces
{
string Name { get; set; }
}
Спасибо,
Эрик Г.