Создать обычный класс или внутренний класс для объекта параметра? - PullRequest
2 голосов
/ 27 марта 2009

Вместо того, чтобы передавать много аргументов методу, я инкапсулировал его в объект аргумента.

примечание : упрощено для демонстрации
alt text

В таком случае, что было бы лучше?

• Создайте класс и назовите его как InventorySaveArgs?
- или -
• Создайте вложенный класс и имя его как SaveArgs?

И не могли бы вы также объяснить, почему один выбирает один или другой?

[EDIT] : Этот тип аргумента будет использоваться и в других сборках.

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

[ОБНОВЛЕНИЕ] : Найдены рекомендации по использованию вложенных типов в MSDN
InventorySaveArgs должен быть доступен из других сборок, так что я собираюсь с обычным классом.

Ответы [ 4 ]

1 голос
/ 27 марта 2009

Единственный шаблон для инкапсуляции нескольких параметров в один объект, о котором я когда-либо слышал, - это шаблон рефакторинга , подробно описанный Мартином Фаулером

1 голос
/ 27 марта 2009

Руководство по проектированию IIRC .NET достаточно ясно об этом - не должно быть открытых вложенных типов.

1 голос
/ 27 марта 2009

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

Наличие внутреннего класса довольно откровенно раздражает в C #, потому что вы должны постоянно добавлять префикс имени типа к имени класса. Как уже говорилось, единственной мотивацией для публики станет сокращение загрязнения пространства имен. Но если ваше пространство имен настолько велико, что класс InventorySaveArgs делает его слишком большим, вам, вероятно, все равно придется разбить пространство имен.

1 голос
/ 27 марта 2009

Я бы назвал его InventorySaveArgs на тот случай, если вы когда-нибудь захотите сделать тип доступным для использования другими типами. Если вы назовете его InventorySaveArgs с самого начала, у вас будет имя, которое будет иметь смысл во всех контекстах, если вам когда-либо понадобится рефакторинг.

...