Реализация интерфейсов в частичных классах - PullRequest
9 голосов
/ 13 января 2011

Рассмотрим класс, который реализует множество интерфейсов, имеет ли смысл реализовывать каждый интерфейс в отдельном файле, используя определения partial class?

Будет ли это злоупотребление языковой функцией или это идиома, о которой я не знаю?

Ответы [ 8 ]

12 голосов
/ 13 января 2011

Если ваш класс имеет для реализации многих интерфейсов, это разумный способ управления источником, да. Вы можете отредактировать файл проекта, чтобы несколько из них зависели от одного "основного" файла класса, что облегчает работу с обозревателем решений.

Вы должны спросить себя, не следует ли иметь несколько классов меньшего размера, каждый из которых реализует один интерфейс. Иногда такой подход будет лучше, иногда нет, но всегда стоит задать вопрос.

4 голосов
/ 13 января 2011

Не та идиома, о которой я когда-либо слышал, но звучит как элегантный способ разделить ваш код.

3 голосов
/ 13 января 2011

Я думаю, что вы должны спросить себя, не облегчит ли код код для каждого интерфейса, реализованного вашим классом.Как бы вы назвали файлы?

Несмотря на то, что я, возможно, собираюсь выйти из строя, я думаю, что я собираюсь предложить вам вместо этого использовать очень ненавистную директиву #region, если целью является организация кода.

2 голосов
/ 13 января 2011

Вы можете, да, но это не даст вам больше преимуществ по сравнению, скажем, с одним файлом с регионами.Частичные классы имеют тенденцию быть непристойными, потому что не сразу очевидно, что есть другая часть, и кто-то еще, смотрящий на класс, может пропустить это.Я лично предпочитаю, чтобы все было в одном месте.

1 голос
/ 13 января 2011

Это имеет такой же смысл, как наличие конструкторов в одном файле частичных классов, свойств в другом файле частичных классов и т. Д. И т. Д.

т.е. не делайте этого, если у вас нет веских причин.

1 голос
/ 13 января 2011

Pro: может легко определить, какая часть класса реализует какой интерфейс (хорошо, если вы используете инструмент, который не позволяет легко перемещаться по коду внутри IDE).

Con: легче потерять контекстпоскольку теперь вам приходится перемещаться по нескольким файлам

Я предполагал, что в настоящее время в среде IDE достигнут прогресс, это не имеет большого значения.Вы можете иметь один файл, и инструмент поможет вам быстро перемещаться по структуре вашего класса.Но опять же, инструмент может помочь в любом случае ... так что ...

Частичное все еще хорошо для отделения сгенерированного кода от пользовательского кода.

1 голос
/ 13 января 2011

Единственное преимущество - иметь различные реализации интерфейса в отдельных физических файлах.

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

0 голосов
/ 29 июня 2017

Я думаю, что есть лучшие способы структурирования вашего кода, чем использование партиалов в этом случае. В Visual Studio нет ссылки, с которой вы могли бы ознакомиться, чтобы узнать, сколько существует частичных реализаций для определенного класса, поэтому легко потерять отслеживание.

В зависимости от того, сколько интерфейсов вы на самом деле имеете в виду, имея «много интерфейсов», вы можете использовать регионов для разделения реализаций. Это было бы хорошо до 10-15 интерфейсов с, скажем, 150 функциями для реализации. После этого все станет грязно, и вы потеряете обзор. И здесь вы получите выгоду от других механизмов, таких как наследование, инкапсуляция или агрегация, а также использование сервисов и вспомогательных классов.

Но я бы серьезно пересмотрел архитектуру вашего кода, если вам когда-нибудь понадобится реализовать более 15 интерфейсов ....

...