Ответил ли этот на ваш вопрос?
Я никогда не использовал reinterpret_cast
, и задаюсь вопросом, работает ли он в случае, который ему нужен, это не запах плохого дизайна. В базе кода я работаю над dynamic_cast
. Разница с static_cast
заключается в том, что dynamic_cast
выполняет проверку времени выполнения, которая может (безопаснее) или не может (больше служебных) быть тем, что вы хотите (см. msdn ).
Если у Вас есть последовательный UOM для вещей, то политика Вашего DBA в порядке.
, Например, если промежутки находятся ВСЕГДА в минутах, и т.д.
, Если UOM мог бы измениться, то необходимо сохранить его в другом столбце, вместе с количеством.
Однако я склонен принимать сторону Вас на этом. Ясность превосходит большинство вещей, включая это. я видел бы DurationMinutes
, чем Duration
и имел бы для предположения, каков UOM.
Да. Вы должны.
ключ, как [Charles Bretana] указал, четкость и что другие пользователи Вашей таблицы или разработчики после Вас знают то, что Вы используете.
я абсолютно вовлек бы единицы/измерение в имя поля - в моем бизнесе, Вы не можете предположить то, что Вы найдете от контекста или имени: поле под названием MarketValue - то, что в миллионах, тысячах или единицах? Доллары США, Евро, фунты, $CURRENCY? То значение является процентом, отношением? Абсолютный или относительный? Ежедневно, ежемесячно, календарный год, финансовый год? Та метка времени, во сколько зона - он?
Ваше первое, последнее и только задача при обеспечении данных состоит в том, чтобы гарантировать, что это не используется неправильно, потому что потребитель не смог узнать достаточно об этом. Как разработчики, бросая "Метр", "доллар США", "GMT", "Процент" или безотносительно в имя поля не является наименее разрядным вонючим.
существуют огромные запахи, которым нужно разрешение перед крошечным дуновением поля, называющего стандартизацию потребностей.
Поэтому Орбитальный аппарат Климата Марса врезался в поверхность на уровне 350 метров/секунда, когда было запланировано только обработать 350 футов/секунда (или что-то как этот).
, Хотя "Никогда не говорят 'Никогда' или 'Всегда'", в целом, хорошее эмпирическое правило, здесь я изогну свое правило и скажу, что думаю, что необходимо "всегда" прояснять, в каких единицах числовое значение находится.
Я думаю, что это - хорошая идея где угодно, так как всегда существует место для неоднозначности.
, Например, с высокопроизводительным классом таймера мы используем, я продолжаю иметь необходимость проверить, возвращает ли GetElapsed () метод секунды или миллисекунды или что-то еще. Если бы это назвали GetElapsedMilliseconds (), который сохранил бы беспорядок.
единственный недостаток, являющийся, если бы Вы хотели передумать..., но в этом случае любые клиенты должны были бы знать об изменении так или иначе.
F# имеет интересное скручивание на этом измерении разрешения единицы, которые будут определены в системе типов. Посмотрите этот сообщение в блоге , и другой stackoverflow вопрос, обсудив , действительно ли единицы измерения уникальны для F#?
Соглашение именования всех моих столбцов в формате:
{name}_in_{unit}
помог для одного проекта, так как я использовал единицы СИ , он на самом деле закончил тем, что позволил мне быть в состоянии вывести тип данных столбца и обычно упрощать мой стиль записи.
length_in_m
speed_in_ms-1
color_in_nm
было несколько исключений, которые я обработал или с _at_time или с number_of_:
started_at_time updated_at_time number_of_rotations
Не помещайте единицы измерения (или тип столбца) в Ваших именах столбцов базы данных.
Много Баз данных имеют способность документировать/комментировать столбцы в некотором роде (в SQL Server, это - sp_addextendedproperty), я предположил бы, что это - более соответствующее место.
Я сделал большую работу базы данных, и я не осудил бы это вообще, и при этом я не услышал об осуждении ее.
Это лучше, чем расширенные свойства, который не очевиден для случайного разработчика. Это лучше, чем в отдельном документе, потому что многие разработчики не считают их, и конечно не в мельчайших подробностях. Если единицы установлены, то наличие его на имя походит на хорошую идею. Если это изменяется, то, когда поле единицы добавляется, измените имя измерительного поля.
, Где единица измерения не сразу очевидна, я думаю, что необходимо пойти шаг вперед и включать единицу измерения в имя. Length_mm, например, должен помочь напомнить разработчикам, что они должны преобразовать длину в мм, если бы пользователь просто ввел его в дюймы.
Вы могли пойти даже шаг вперед (в Вашем коде, не в базе данных) и иметь тип Длины, который заботится об измерительной единице и о возможных преобразованиях. Это - подход шаблона "Количества" в "Аналитической книге" Шаблонов Martin Fowler.
Мы не помещаем единицы измерения в имена столбцов в нашей базе данных. У нас действительно, однако, есть документ словаря данных, где все столбцы и отношения описаны.
Идеальный подход, если это возможно, для использования типа, который не оставляет неоднозначности относительно измерения. Например, в.NET вместо того, чтобы говорить int periodInSeconds
Вы были бы очень более обеспеченным использованием TimeSpan period
.
язык F# на самом деле имеет единицы измерения как часть системы типов, таким образом, можно объявить типы в единицах такой как 10<m/s>
и 5<s>
и даже выполнить вычисления на них так, что-то как 10<m/s> * 5<s>
привело бы к 50<m>
. Посмотрите здесь для большего количества информации .
, Таким образом, я сказал бы, если возможное применение тип, который передает Ваше намерение, но если это не возможно тогда, необходимо, вероятно, закодировать измерение на имя. Это лучше и более очевидно, чем комментарий.
Вы определенно хотите единицы измерения где-нибудь . Я не знаю, являются ли имена столбцов хорошим местом или если схема лучше. Спросите своего администратора базы данных
, Если ответы, "это не" или "Вы не можете", жалуйтесь горько---, они не имеют никакого права отклонить Вас Ваше соглашение о присвоении имен. Иначе все могут быть более счастливыми, если Вы работаете в системе.
P.S. Мне действительно нравится поддержка единиц измерения, которые они поместили в F#.
Я должен сказать, я ненавижу "описательные" имена переменной, становящиеся "невероятно подробными" именами переменной.
Моя предпочтительная альтернатива должна использовать только имена единицы измерения в коротких функциях. Например,
function velocity(m, s) {
return m/s;
}
Вы не должны говорить "length_m", потому что в этом контексте, очевидно, что только длины измеримы в метрах.
сказавший это. Если бы я писал систему, где ошибки единиц измерения были действительно опасны, я, вероятно, использовал бы систему типов и определил бы класс Длины, который всегда преобразовывал себя в стандартную единицу для любого вычисления. Возможно, даже различные подклассы для Футов, Метров и т.д.
Нет, название атрибута является отдельным от своей единицы измерения.
при вызове переменной length_mm тогда Вы связываетесь с мм.
, что при использовании интервала на 32 бита для хранения length_mm, в конечном счете длина в мм может стать больше тогда 62,000, или независимо от того, что предел находится на 32 битах ints. Вы наклоняетесь, переключаются на m, вызывают Вас, связал Вас переменная длины с length_mm.
Я думаю, помещая единицы в Ваши идентификаторы, огромны запах дизайна. Это почти, конечно, означает выбор неправильного языка: если единицы так важны для проекта, необходимо использовать язык, система типов которого способна к представлению их.