Имена пространств имен и модель конфликта - PullRequest
0 голосов
/ 27 сентября 2018

В соответствии с рекомендациями Microsoft

X НЕ используйте одно и то же имя для пространства имен и тип в этом пространстве имен.

После этогоПравило кажется обязательным, но не так просто.Чтобы продемонстрировать мою проблему, давайте возьмем общую функцию Account.Допустим, есть Account, который является абстрактной базой с некоторыми дополнительными функциями, такими как Inbox, и двумя реализациями User и Device.Конечно, каждый из его недостатков потребует некоторых моделей.

Account
+--- Account.cs
+--- AccountController.cs
+--- Inbox
|        +--- Inbox.cs
|        +--- InboxController.cs
|         \--- Message.cs
+--- Device
|       +--- Device.cs
|        \--- DeviceController.cs
+--- User
        +--- User.cs
         \--- DeviceController.cs

Эта структура явно имеет конфликт имен между пространством имен (имя папки) и классом (имя модели).Я мог бы легко разрешить первый конфликт, изменив имя основной функции Account на что-то более причудливое, например Identity, но это все еще оставляет два других (User и Devices) нерешенными.Всегда ли мне нужно найти «лучшее причудливое имя» для каждой функции, чтобы избежать этой проблемы?

Имейте в виду, что я хочу следовать структуре folder-by-feature, поэтому создание новой папки / пространства имен только для моделей не являетсяопция.

1 Ответ

0 голосов
/ 27 сентября 2018

Руководящие принципы фактически называются «Руководствами по разработке структуры».Они предназначены для использования людьми, которые пишут библиотеки для других.Это руководящие принципы, не обязательно следовать им.По сути, они ясно дают понять, чего ожидает пользователь вашего кода, а не то, что вы должны делать.

На той же странице, на которую вы ссылаетесь, есть рекомендация "РАССМОТРИТЕ, используя множественные имена пространств имен, где это уместно".Это поможет решить большинство ваших проблем.

У StyleCop есть рекомендация не создавать пространства имен с менее чем пятью типами.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...