Что такое рекомендуемое соглашение об именах для классов в многоуровневом приложении?

У меня есть проблемы с именами моих классов/пространств имен/элементов управления.

В моей бизнес-библиотеке у меня есть пространство имен под названием Shopping. Он содержит следующие классы: ShoppingCartItem
ShoppingCart
ShoppingCartManager

В моем приложении ASP.net я хочу создать элемент управления, который графически представляет элементы экземпляра ShoppingCart. Обычно я бы назвал этот элемент управления ShoppingCart, но еще один класс под названием ShoppingCart? Конечно, компиляция и т.д. Работала бы, но я думаю, что она все еще уродлива. Я думаю, что у меня есть проблема, которую я называю своими бизнес-классами, что они должны представлять. Поскольку, когда дело доходит до уровня представления, я бы назвал элементы управления, которые должны представлять бизнес-класс тем же самым.

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

Что такое рекомендуемое назначение имен для многоуровневого приложения?
Как я могу назвать элемент управления, представляющий элементы ShoppingCart на уровне презентации?

Изменить: Вопросы, относящиеся: Как я могу назвать объект оболочки базы данных?

Ответы

Ответ 1

В парадигме MVC довольно часто встречаются Foo, FooView и FooController.

Вы можете решить, что проще вставить их в другую иерархию (Shopping.Model.Cart, Shopping.View.Cart). Он концептуально чист, но я думаю, что это довольно непроницаемо. Вместо этого вы можете использовать разные имена в разных пространствах имен (Shopping.View.CartView).

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

  • Является ли Car экземпляром автомобиля или конкретной марки/модели автомобиля? Является ли мотоцикл a Car? Если вы собираетесь переименовать его в Vehicle, это велосипед для транспортного средства?
  • Является ли Item типом элемента, экземпляром элемента или quantity экземплярами элемента?
  • Является ли ShoppingCart просто списком элементов/величин или имеет другие функции? Объединяет ли он дубликаты элемента, суммируя количество?
  • Является ли список желаний специальным видом корзины покупок (тот, который вы еще не купили) или что-то еще?
  • Можете ли вы "сохранить" корзину покупок и получить цитату (чтобы вы могли распечатать ее, отнести к своему боссу, отменить его, а затем купить)? Где хранится цитата?

Ответ 2

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

Ответ 3

Вы можете использовать пространство имен для разделения пользовательского интерфейса и бизнес-модели корзины покупок, например:

  • YourApp.Web.UI.ShoppingCart (веб-контроль вашей корзины покупок)
  • YourApp.BusinessEntity.ShoppingCart (класс вашей корзины покупок на уровне вашей бизнес-логики)

Когда вы создаете/используете объект корзины покупок, сначала не очевидно, будет ли объект элементом управления пользовательским интерфейсом или классом сущности, но ваша среда IDE (визуальная студия) предоставит вам intellisense при написании кода и подсказка, когда вы наводите указатель мыши на имя, которое может облегчить вашу проблему.

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

  • YourApp.Web.UI.ShoppingCart uiShoppingCart;
  • YourApp.BusinessEntity.ShoppingCart beShoppingCart;

Ответ 4

Вы должны принять решение об условных обозначениях, которые вы собираетесь использовать, прежде чем начинать свой проект. В .NET Framework содержится ряд предложений по соглашениям об именах, вы можете найти предложения по соглашению об именах Visual Basic® в этом месте в документах:

мс-помощь://MS.VSCC/MS.MSDNVS/vbcn7/html/vaconVBNamingRules.htm

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

Ознакомьтесь с этой для более подробного обсуждения.