Я просто столкнулся с «интересной проблемой», о которой я хотел бы узнать ваше мнение:
Я занимаюсь разработкой системы и по многим причинам (т.е. абстракция, технологическая независимость и т. Д.) Мы создаем свои собственные типы для обмена информацией.
Например: если есть метод, который называется SendEmail и вызывается бизнес-логикой, он может иметь параметр типа OurCompany.EMailMessage, который является полностью независимым от технологии объектом и содержит только «данные, относящиеся к бизнесу» (для Например, нет информации о кодировании головы).
Внутри функции SendEmail мы получаем эту информацию из нашего объекта EMailMEssage и создаем объект MailMessage (это зависит от технологии), чтобы его можно было отправлять по сети.
Как вы уже можете заметить, у нашего класса очень похожее название на «родной» языковой класс. Проблема в том, что это именно то, чем они являются, сообщения электронной почты, поэтому трудно найти другое значимое имя для них.
У вас есть эта проблема часто? Как тебе это удается?
Редактировать: @mgkrebbs только что прокомментировал использование полностью определенных имен. Это наш нынешний подход, но слишком многословный, ИМХО. Я хотел бы что-нибудь чище, если это возможно.
источник
Ответы:
Это проблема с пространством имен, которое вы собираетесь использовать для своего проекта.
По сути, пространство имен - это набор ключевых слов, предоставленных всеми вашими классами и / или всеми классами, которые вы хотите использовать в своем проекте (включая стандартные классы, обычно предоставляемые с языком / компилятором / IDE).
Поскольку пространство имен является коллекцией, применяются некоторые правила, чтобы предотвратить путаницу терминов без какого-либо связанного поведения, а некоторые языки, такие как C #, также позволяют вам определять свое собственное пространство имен, как обычно, и также использовать его в других классах.
Не путайте пространство имен с основным ключевым словом языка, они оба представляют собой набор ключевых слов, но с большой разницей между ними: вы можете изменить пространство имен, но обычно вы не можете изменить основные ключевые слова языка. Сумма между пространством имен, которое вы использовали в своем проекте, и основными ключевыми словами языка, который вы используете, дает вам общее количество ключевых слов.
Тема широко обсуждается в сети, я могу предложить базовый поиск с терминами «пространство имен [ваш язык]» или что-то в этом роде. Я не отвечаю прямо на ваш вопрос просто потому, что вы можете по-разному подходить к разным языкам.
источник
Ну, моя старая команда разработчиков использует для добавления аббревиатуру приложения в каждом настраиваемом классе. У нас был, например, класс ABCEmail .
Я думаю, что это более просто, чем полагаться на пространство имен, но может быть также дополнительным решением для использования пространства имен.
И последнее, но не менее важное: поскольку вы создаете новый объект, это означает, что собственный объект не отвечает вашим потребностям, поэтому ваше имя файла электронной почты может быть CustomizedEmail , AdvancedEmail ... и т. Д.
источник
OAEmail
лучше чемOurApplication.Email
?OAEMail
оказывает влияние на каждую часть программного обеспечения, в то время как нотация пространства имен оказывает влияние только там, где происходит преобразование, и оба класса используются в одном и том же исходном файле.Какой язык вы используете? Ответ зависит от языка. В общем случае ответ «использовать пространства имен». Я бы почти никогда не искажал имя типа, чтобы избежать конфликта с каким-либо внешним пространством имен.
В одном приложении Java довольно часто иметь одно и то же имя класса (например, «Дата»), определенное в полдюжине пространств имен. Если одному классу необходимо использовать два отдельных класса Date, тогда один из классов Date должен быть полностью квалифицирован везде, где он появляется, поскольку Java не поддерживает псевдонимы типов. В С ++ жизнь проще; Вы можете просто переименовать один из них с помощью typedef.
источник
Это действительно зависит от языка, который вы используете. В C ++ и Java эта проблема решается с помощью пространств имен. Я использую c ++, и бывает, что у меня разные классы с одинаковыми именами. Это не проблема, поскольку они находятся в разных пространствах имен.
В других языках нет способов обойти, кроме как дать разные имена.
источник
xyz123
и он все еще работает так же. Я не вижу другого пути, чем становиться многословным (вы сказали в комментариях, что пытаетесь избежать этого).Ваш вопрос очень хороший. Как насчет того, если вы префикс вашего метода с префиксом, например, U (или U) или CLS (сокращение от класса)? Например:
clsEMailMEssage или uEMailMEssage
Это не требует большого набора текста, и вы можете сразу сказать, что тип «ваш».
Изменить - В ответ на первые 2 комментария:
Я хотел бы обратить внимание читателя на тот факт, что: не все венгерские обозначения созданы равными. Мы должны различать System Hungarian и Apps Hungarian. Я предполагаю, что приведенное выше предложение соответствует типу Apps Hungarian, который не является вредным.
Вред, связанный с системной венгерской нотацией, такой как присвоение имени идентификатору intID, в приведенном выше предложении отсутствует.
Чтобы узнать больше об этом, взгляните на: Создание неправильного кода - неправильный - Joel On Software
источник