Re[8]: Как правильно: публичный метод возвращает список...
От: Doc Россия http://andrey.moveax.ru
Дата: 20.07.21 03:02
Оценка:
Здравствуйте, samius, Вы писали:

S> Остальное — лишь допущения.


Тут про данны типа интерфейса согласен (но по поводу возвращаемого типа это мою точку зрения не меняет).
Re[7]: Как правильно: публичный метод возвращает список...
От: karbofos42 Россия  
Дата: 20.07.21 04:11
Оценка:
Здравствуйте, Doc, Вы писали:

Doc>Здравствуйте, karbofos42, Вы писали:


K>>Тут же придётся переделывать контракт и менять клиентов, либо внутри метода возвращать не уже заполненный HashSet, а создавать новый List на его основе и уже его возвращать, т.е. лишняя работа.


Doc>Т.е. изначально выбрали не правильную абстракцию. Все дальнейшие проблемы как раз от этого.


Так вроде бы было, что "стоит возвращать самый точный интерфейс", а теперь оказывается, что есть неправильные абстракции
Re[8]: Как правильно: публичный метод возвращает список...
От: Doc Россия http://andrey.moveax.ru
Дата: 20.07.21 07:43
Оценка:
Здравствуйте, karbofos42, Вы писали:

K>Так вроде бы было, что "стоит возвращать самый точный интерфейс", а теперь оказывается, что есть неправильные абстракции


Я про изнечальное решение "создаётся локальный List<T>, в него заполняются все данные и он же возвращается." Или же я не так понял ваш пример.
Re[9]: Как правильно: публичный метод возвращает список...
От: karbofos42 Россия  
Дата: 20.07.21 08:53
Оценка:
Здравствуйте, Doc, Вы писали:

Doc>Здравствуйте, karbofos42, Вы писали:


K>>Так вроде бы было, что "стоит возвращать самый точный интерфейс", а теперь оказывается, что есть неправильные абстракции


Doc>Я про изнечальное решение "создаётся локальный List<T>, в него заполняются все данные и он же возвращается." Или же я не так понял ваш пример.


Допустим, у нас есть объект со словарём. Есть метод типа:
public IReadOnlyCollection<Key> GetActiveItemsKeys()
{
  return _dict
    .Where(item => item.Value.IsActive)
    .Select(item => item.Key)
    .ToList();
}


либо без Linq создаётся лист и в него данные записываются по какому-то принципу.
Потом решили оптимизировать и завели ещё множество для хранения активных элементов, что теперь перебор не нужен и есть готовый HashSet со всеми нужными элементами.
Можно будет переделать на:
public IReadOnlyCollection<Key> GetActiveItemsKeys()
{
  return _activeItemsKeys;
}

но тут конечно нельзя сказать, что поведение на 100% осталось прежним и нигде ничего не отвалится.
Контракт остался как был, но есть нюанс, что тоже не есть хорошо и нужно учитывать.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.