Соглашение о присвоении имен действия

Давайте проанализируем это математически.

Дата начала может быть либо в субботу, либо нет. Аналогично, дата окончания может быть либо в субботу, либо нет. В простейшем случае обе даты в субботу; тогда вы можете ясно видеть, что число суббот равно 1 плюс количество недель между двумя датами.

Отсюда легко увидеть, что если начальная дата в субботу, а конечная дата - нет, то число суббот будет равно 1 плюс количество недель между двумя датами , округленное в меньшую сторону. , так как неделя окончания даты еще не достигла субботы. Оказывается, та же самая математика работает и для первого примера, поскольку между датами у вас будет целое число недель. Таким образом, мы можем охватить оба примера, просто используя 1 + floor(weeks_between_dates).

Что если конечной датой является суббота, а начальной - нет? Оказывается, математика все еще работает так же! Это то же самое, что «перенести» дату начала с субботы, и это добавит частичную неделю, пока она не достигнет предыдущей субботы. Эти неполные недели округляются по полу, и как только они достигнут предыдущей субботы, вы все равно добавите 1, поскольку к разнице добавится целая неделя! Таким образом, мы все еще хорошо с 1 + floor(weeks_between_dates).

Таким образом, единственная возможная комбинация - две даты, которые не являются субботой. Это самая сложная возможность. Давайте начнем с простого и предположим, что даты - две среды подряд. Затем они отделяют 1 неделю и между ними 1 суббота. Просто. Если они две недели друг от друга, у них есть 2 субботы. Но что, если это среда и следующий вторник? Между ними меньше недели, но все равно 1 суббота. А если это среда и следующий четверг? Больше 1 недели, но еще 1 суббота! Так что в этом случае мы бы хотели округлить количество недель и остановиться на этом, давая нам ceil(weeks_between_dates). Но если они оба находятся в одной и той же неделе - например, в понедельник и пятницу - в одну и ту же неделю, то ответ - всего 0. Итак, как мы узнаем, являются ли дни частью одной недели? Предполагая, что они отсортированы и дата начала всегда предшествует дате окончания, тогда они находятся на одной и той же неделе, если и только если между ними меньше 1 недели, а день начала недели предшествует концу дня недели.

Итак, прямая условная логика здесь такая (в псевдокоде):

weeks_between = floor((days between start and end) / 7)
if start.weekday = Saturday or end.weekday = Saturday, then:
    return 1 + weeks_between
else if weeks_between = 0 and start.weekday is before end.weekday, then:
    return 0
else
  return ceil((days between start and end) / 7)
25
задан stimms 23 September 2008 в 00:47
поделиться

4 ответа

Rob Conery в MS предложил некоторое полезное УСПОКОИТЕЛЬНОЕ именование стиля для действий.

* Index - the main "landing" page. This is also the default endpoint.
* List - a list of whatever "thing" you're showing them - like a list of Products.
* Show - a particular item of whatever "thing" you're showing them (like a Product)
* Edit - an edit page for the "thing"
* New - a create page for the "thing"
* Create - creates a new "thing" (and saves it if you're using a DB)
* Update - updates the "thing"
* Delete - deletes the "thing"

результаты в URL вроде (для форума)

* http://mysite/forum/group/list - shows all the groups in my forum
* http://mysite/forum/forums/show/1 - shows all the topics in forum id=1
* http://mysite/forums/topic/show/20 - shows all the posts for topic id=20

Rob Conery на Архитектуре RESTful для MVC

41
ответ дан 28 November 2019 в 21:08
поделиться

Встроенный суффикс действий Django _done. Таким образом, LoginDone будет страницей, которая обрабатывает Login (в стиле верблюда ASP.NET MVC).

0
ответ дан 28 November 2019 в 21:08
поделиться

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

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

Лично я, вероятно, принял бы сторону Входа в систему и ProcessLogin, поскольку LoginDone является, вероятно, немного вводящим в заблуждение с точки зрения того, что делает Действие - это, конечно, предполагает, что Действие реагирует на учетные данные пользователей и проверяет, допустимы ли они. Вы могли тогда передать до другого Действия под названием LoginDone, как только вход в систему успешен, или LoginFailed, если это не.

0
ответ дан 28 November 2019 в 21:08
поделиться
Другие вопросы по тегам:

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