Есть ли какие-то рекомендации по использованию пространства имен в больших проектах? - PullRequest
1 голос
/ 05 апреля 2011

Существуют ли общепринятые рекомендации по использованию и организации пространств имен в больших проектах?

Спасибо!

Ответы [ 4 ]

4 голосов
/ 05 апреля 2011

Руководство Майкрософт равно CompanyName.TechnologyName[.Feature][.Design].

2 голосов
/ 05 апреля 2011

Вы можете попробовать FxCop, есть несколько правил.

  1. Как правило, вы можете указать базовый префикс (компания)

  2. Затем добавьте уровни / модули проекта (DAL, UI, Common и т. Д.)

Затем я добавляю имена папок в пространство имен.

Так что, если мой файл с классом MegaUtil находится в prj Common в папке Utils / Misc, это будет:

YourCompanyName.Common.Utils.Misc
0 голосов
/ 05 апреля 2011

..

например. если ваша компания называется Sample Software Solutions и вы писали систему банкомата, то у вас могут быть такие сборки, как:

  • SSS.ATM.Domain
  • SSS.ATM.Data
  • SSS.ATM.Common (сборка, общая для банкоматов)
  • SSS.ATM.Services
  • SSS.ATM.UI SSS.Common (сборка, общая для всех продуктов)

Тогда у нас обычно есть несколько сборочных тестов:

  • SSS.ATM.Domain.UT
  • SSS.ATM.Data.UT
  • SSS.ATM.Common.UT
  • SSS.ATM.Services.UT
  • SSS.ATM.UI.UT
  • SSS.Common.UT

А также могут быть одна или две сборки IT или AT (интеграционное / приемочное тестирование), например,

  • SSS.ATM.Domain.IT (интеграционное тестирование домена)
  • SSS.ATM.UI.AT (проверка приемлемости через пользовательский интерфейс)
0 голосов
/ 05 апреля 2011

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

Совет: чтобы ваш код никогда не путался с другими объектами, используйте обратный порядок доменного имени, которое может быть зарегистрировано длятовар.

com.somecompany.app.*


    com.somecompany.Math;   
                     Math.work(a,b)

    com.somecompany.UI;
                     UI.SomeUserControl
                     UI.AnotherUserControl
                     UI.Forms;


    com.somecompany.Web;
...