использование пространства имен C++ и называющие правила

MongoDB фактически хранит миллины даты как int (64), как предписано http://bsonspec.org/#/specification

Однако, это может становится довольно запутанным, когда вы извлекаете даты, поскольку клиентский драйвер будет создавать экземпляр объекта даты с его собственным местным часовым поясом. Драйвер JavaScript в консоли mongo, безусловно, сделает это.

Итак, если вы заботитесь о своих часовых поясах, убедитесь, что знаете, что это должно быть, когда вы вернетесь. Это не должно иметь большого значения для запросов, поскольку оно все равно будет соответствовать одному и тому же int (64), независимо от того, в какой временной зоне находится объект даты (надеюсь). Но я бы определенно делал запросы с объектами фактической даты (не строки), и пусть драйвер делает свое дело.

23
задан Mykola Golubyev 2 March 2009 в 18:58
поделиться

3 ответа

, Для чего пространства имен:

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

Общие правила:

Определение слишком большого количества контекста не нужно и вызовет больше неудобства, чем это стоит.

, Таким образом, Вы хотите использовать свое лучшее суждение, но все еще следовать этим 2 правилам:

  • не являются слишком общими, когда использование пространств имен
  • не слишком конкретно при использовании пространств имен

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

, Почему пространства имен, которые являются слишком общими, не полезны:

проблема с делением пространства имен, запускающегося с названия продукта, то, что у Вас часто будет компонент кода или некоторая основная библиотека, которая характерна для нескольких продуктов.

Вы также не будете использовать пространства имен Product2 в Product1, так явно определение, что это бессмысленно. При включении файлов Product2 в Product1 то это называет преобразование все еще полезным?

, Почему пространства имен, которые слишком конкретны, не полезны:

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

Классы со всеми помехами по сравнению с шаблонами:

, "Почему мы должны создать внутренний не частные классы и не пространства имен? Почему должен мы создавать классы, где все методы являются статическими"

Некоторые различия:

  • Пространства имен могут подразумеваться при помощи using, Пространства имен ключевого слова
  • могут быть искажены, классы являются типами и могут быть пространствами имен typedef'ed
  • , может быть добавлен к; можно добавить функциональность к нему в любое время и добавить к нему непосредственно
  • , Классы не могут быть добавлены к, не делая новый производный класс
  • , Пространства имен могут иметь предописания
  • С классами, у Вас могут быть члены парламента, не занимающие официального поста и защищенные участники
  • , Классы могут использоваться с шаблонами

Точно, как разделиться:

"Проект состоит из 1 ГБ исходного кода. Так, что лучшая практика должна разделить модули на пространствах имен в C++?"

Это слишком субъективно для высказывания точно, как разделить код без точного исходного кода. Деление на основе модулей, хотя логичные звуки, просто не целый продукт.

39
ответ дан Qix 29 November 2019 в 01:46
поделиться

Это все субъективно, но я смущался бы идти больше чем 3 уровня глубоко. Это просто становится слишком громоздким в какой-то момент. Таким образом, если Ваша кодовая база не очень, очень большая, я сохранил бы ее довольно мелкой.

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

5
ответ дан Brian Neal 29 November 2019 в 01:46
поделиться

Мне кажется, что Вы пытаетесь использовать пространства имен в качестве средства проектирования. Они не предназначаются для этого, они предназначаются для предотвращения столкновений имени. Если у Вас нет столкновений, Вам не нужны пространства имен.

2
ответ дан 29 November 2019 в 01:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: