C #: Что бы вы назвали классом IEnumerable? - PullRequest
7 голосов
/ 14 июля 2009

Читая этот вопрос Я немного удивился. Скажем, у вас есть эти два:

class ProductCollection : ICollection<Product>
class ProductList : IList<Product>

Как бы вы назвали тот, который был IEnumerable<Product>?

class Product--- : IEnumerable<Product>

Прежде, чем я прочитал этот другой вопрос, я мог бы назвать его на самом деле ProductCollection, но с учетом новой информации это было бы немного вводящим в заблуждение, поскольку он не реализует ICollection<Product>. Не могли бы вы назвать это Products?

var products = new Products(); // products is/are products

Почти работает, но звучит немного странно ... Как бы вы это назвали?

Ответы [ 9 ]

6 голосов
/ 14 июля 2009

Как правило, имя класса не основывается на каком-либо интерфейсе , который он реализует.(Какой из них вы выбираете, когда их несколько, для начала?) Весьма типично основывать его на унаследованном классе , но чаще просто на цели класса, и, конечно, не наинтерфейс.(Интерфейс может быть назван в честь класса, если угодно.)

Ваш пример несколько недействителен тем фактом, что хорошо спроектированный ProductCollection должен реализовывать ICollection<Product> и IEnumerable<Product> хотя хорошо спроектированный ProductList должен реализовывать оба этих интерфейса, а также IList<Product>.

Если вы посмотрите на BCL .NET Framework, вы должны заметить, что это именно тот случай.Класс List<T> реализует все три интерфейса, так же как и класс Collection<T> (хотя обратите внимание, что в общем случае «коллекция» не обязательно должна реализовывать IList<T>).

6 голосов
/ 14 июля 2009

Я думаю, что "Sequence" будет хорошим суффиксом.

5 голосов
/ 14 июля 2009

Если бы он реализовывал только IEnumerable<Product>, то я бы назвал его ProductEnumeration, но я не стеснялся бы назвать его экземпляр products. С другой стороны, я не помню, чтобы когда-либо создавался класс, который реализовывал только IEnumerable<T>. Похоже, не имеет особого смысла, если вы не можете добавить что-то к этому, и если вы можете, то я бы унаследовал один из классов коллекции, который реализует IEnumerable<T>, и унаследовал бы это поведение.

Если бы я возвращал перечисление сущностей Product, я бы просто возвратил его как IEnumerable<Product> без специального класса.

2 голосов
/ 14 июля 2009

Это будет зависеть от контекста, например, это может быть ProductsCatalog (что подразумевает только для чтения характер IEnumerable).

В более общем смысле это может быть ProductsView. Конечно, выборка Products может быть изменяемой, но я все же чувствую, что она "звучит" уместно.

0 голосов
/ 14 июля 2009

Я бы сказал Коллекция . Он может предлагать ReadOnlyCollection или ObservableCollection, но он хорошо описывает класс. В конце концов, это набор продуктов (каким бы ни был базовый тип).

Чтобы решить этот вопрос и другой вопрос, используйте это;)
http://www.classnamer.com/

0 голосов
/ 14 июля 2009

Как и kek444 Я думаю, мне нужно спросить, что еще он делает? Он реализует IEnumerable <>, но это не все, что он делает, иначе вам не понадобится класс, верно? Это коллекция? Преобразует ли оно одно перечисляемое в другое (изменить порядок, выбор, генерацию и т. Д.)?

0 голосов
/ 14 июля 2009

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

0 голосов
/ 14 июля 2009

Проблема здесь в том, что List или Collection навязывают свое поведение. Но IEnumerable очень универсален, и не только в C # означает универсальный. Каждая реализация может быть за этим.

Некоторые предложения:

  • ProductIterator: выполняет итерацию продуктов.
  • ProductRetriever: это возвращает продукты.
  • ProductCreator: создает новые продукты во время выполнения.
0 голосов
/ 14 июля 2009

Если вы посмотрите на типы в .NET Framework, который реализует IEnumerable<T>, я бы сказал, что наиболее распространенным является суффикс Collection, за которым следует форма во множественном числе того, что содержится в списке. Затем существует ряд «особых случаев» (таких как Queue и Stack). Я лично проголосовал бы за Collection как выбор из первых рук.

...