Должна ли последняя дата называться «старт» или «конец»? [закрыто]

Итак, у меня есть функция, которая принимает две даты. SQL-запрос получает все результаты между двумя датами. В настоящее время у меня есть моя настройка функции:

function myFunc(start, end)

Где начинается самая последняя дата и конец - самая старая дата.

Является ли это интуитивно понятным /правильным или существует другое соглашение об именах /заказах, которое я должен использовать?

6 голосов | спросил David Peterman 18 Maypm12 2012, 19:21:01

9 ответов


32

Как правило, вы думаете, что start <= end, так что не совсем. Попробуйте переименовать его, чтобы дать подсказку бизнес-логике, которую вы пытаетесь реализовать.

ответил Oleksi 18 Maypm12 2012, 19:25:33
19

В нормальном ходе бизнеса время работает только в одном направлении, а «начало» обычно происходит до «конца». Я был бы склонен сделать «начало» самой ранней даты в диапазоне и «закончить» последнюю. Но если ваш запрос просто ищет что-либо между двумя датами и не зависит от их упорядоченности (что создавало бы более надежную и удобную в использовании функцию), то не имеет значения, как вы их называете.

Очевидно, легко добавить эту функцию к вашей функции. Просто используйте функцию, чтобы сравнить две даты и обменять их, если они еще не в том порядке, в котором это требуется. Вы также можете указать параметры более общие имена, например date1 и date2, чтобы сообщить пользователям, что им просто нужно предоставить две даты и не беспокоиться о заказе.

ответил Caleb 18 Maypm12 2012, 19:29:30
15

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

function myFunc(recentDate, oldDate)
ответил Corv1nus 18 Maypm12 2012, 19:27:22
5

Вы определяете временной интервал. Временной интервал имеет начало и конец (или начало и конец). У него нет «самых последних» и «наименее недавних», потому что это вызывает понятие «настоящее», что не имеет значения.

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

ответил MPelletier 18 Maypm12 2012, 21:34:25
3

Я думаю, что начало не должно использоваться. Для начала и остановки, а не для начала и конца. Я думаю, вы можете использовать Begin и End вместе, но это может снова ввести в заблуждение, с какой точки зрения вы смотрите на Begin.

Я использую функцию (FROM, TO) для более правильного английского языка. Но в любом случае вы должны поместить логику оболочки в свою функцию, которая правильно устанавливает самую раннюю дату:

if FROM is earlier than TO 
 t_earliestDate = FROM
 t_latestDate = TO
else
 t_earliestDate = TO
 t_latestDate = FROM
ответил ArmenB 18 Maypm12 2012, 21:00:17
3

В самом деле, кого это волнует. Это диапазон дат, вам нужно все между двумя датами. Независимо от названий, кто-то испортит их использование.

И ваш код хочет start быть последней датой, а end будет самым старым.

Итак, в начале вашей функции переключайте их, если они обращены назад.

var tmpStart = start;
var tmpEnd = end;
start = (tmpStart < tmpEnd) ? tmpEnd : tmpStart;
end   = (tmpStart < tmpEnd) ? tmpStart : tmpEnd;

Я лично использовал бы from и to вместо start и end .

ответил CaffGeek 18 Maypm12 2012, 20:03:55
1

Вы можете создать тип упаковки (класс или структуру), называемый DateInterval. DateInterval - это то, что определяется датой начала (самой ранней) и конечной датой (последняя).

Затем вы меняете исходную функцию для получения одного аргумента: DateInterval.

Я бы сказал, что это приводит к более естественному дизайну - эти две даты не имеют смысла друг без друга. Он также уменьшает количество аргументов функции. Кроме того, я думаю, что это уменьшает двусмысленность, так как большинство людей, вероятно, распознают DateInverval как пару.

ответил MyNameIsZero 19 Mayam12 2012, 00:29:01
0

В хорошо спланированном фрагменте кода все эти проблемы необходимо адресовать:

  • Даты только в прошлом.
  • Даты только в будущем.
  • Даты, которые соединяют текущее время.
  • Запросы с одним значением :. Отныне до сейчас, или теперь до этого.
  • Запросы не в порядке
  • Запросы со строковым вводом: вчера
  • Запросы с только частичными значениями: всего год или всего месяц и год; Второй квартал фискального 2012 года.

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

Также помните о том, чтобы документировать, так что разработчик или пользователь ясно, что происходит.

ответил mhoran_psprep 19 Maypm12 2012, 15:55:53
0

Это зависит от того, как вы используете его в своих приложениях и /или бизнес-правилах. Если они думают об этих диапазонах дат как «Начните с этой даты и вернитесь во времени к другой дате» , вы все настроены. Программисты или dbas, которые будут использовать эту функцию, будут рассматривать дату начала как самую раннюю дату, а конец - самый последний. Я бы подумал, что это будет хронологически.

Вы указали, что функция будет запускать запрос sql с диапазоном дат «между» этими двумя датами. Оператор BETWEEN будет искать диапазон дат:> = дата начала AND <= дата окончания. Пользователи могут не знать, как вы это делаете в коде функции, но это просто кажется последовательным /стандартным.

ответил JeffO 19 Maypm12 2012, 16:13:58

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

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132