Я ищу мнение о чем-то.Рассмотрим следующий код из класса SomeApiObject
:
// Property with private setter
public IList<string> SomeList
{
get;
private set;
}
// Constructor
public SomeApiObject()
{
SomeList = new List<string>();
}
При такой настройке пользователи класса SomeApiObject
не могут переназначить свойство SomeList
, но то, что они могут do - манипулировать существующим списком, используя такие методы, как Add()
, Remove()
и Clear()
.
. Преимущество этого шаблона в том, что свойство гарантированно никогда не будет null
, чтоЭто может быть очень удобным предположением, поскольку пользователь работает с API, поскольку это означает, что пользователь всегда может перебирать список, получать размер списка или добавлять к нему, даже не проверяя null
.
Я вижу несколько минусов.С одной стороны, для пользователя не обязательно очевидно, что список предназначен для записи посредством манипулирования его содержимым.С другой стороны, я мог бы представить себе ситуации, когда манипулирование списком менее удобно с синтаксической точки зрения или, возможно, хуже по производительности, чем назначение нового списка.
Я с этим воздерживаюсь и ищу мнения.
- Являются ли потенциальные недостатки слишком неприятными для пользователя API?
- Является ли гарантия того, что функция
null
никогда не будет настолько приятной, как мне кажется?
РЕДАКТИРОВАТЬ:
Я уже убежден в преимуществахиспользования какого-то шаблона «никогда не ноль».Что меня больше интересует, так это чтобы кто-то сыграл адвоката дьявола и показал мне, почему наличие частного сеттера в списке, которым нужно манипулировать, может раздражать и / или запрещать с точки зрения пользователя API.
Некоторое время назад я выпустил оболочку .NET API, и до сих пор несколько пользователей не понимали, как присваивать значения таким свойствам, как этот.