Я пытаюсь разбить большой объект на более мелкие интерфейсы. Пример:
public class SomeService
{
readonly GodObject _god; // <-- Replace this with an Interface
public SomeService(GodObject god)
{
_god = god;
}
public string SomeProperty => _god.GetSomeValue();
public string SomethingElse => _god.SomethingDifferent;
}
public class GodObject
{
public string GetSomeValue()
{
// do something and return
}
public string SomethingDifferent { get; set; }
// Lots and lots more Members
}
После рефакторинга это должно выглядеть примерно так:
public interface IPartialGodObject // <-- Extracted from GodObject
{
string GetSomeValue();
string SomethingDifferent { get; }
}
public class SomeService
{
readonly IPartialGodObject _god; // <-- Now only references the Interface
public SomeService(IPartialGodObject god)
{
_god = god;
}
public string SomeProperty => _god.GetSomeValue();
public string SomethingElse => _god.SomethingDifferent;
}
public class GodObject : IPartialGodObject
{
//...
}
Может ли Visual Studio или Resharper делать что-то подобное автоматически? Я знаю про Extract Interface, но с большим объектом довольно болезненно проверять только несколько свойств / методов из большого списка.
Обновлять: Чтобы уточнить, я хочу, чтобы были извлечены только те члены, которые используются классом SomeService.





Похоже, что для этого не существует автоматизированного процесса. В итоге я сделал следующее (Решарпер 2018):
Extract InterfaceSelect Public