Трудно кодируя по сравнению с Универсальным кодированием: Где разграничить?

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

Вам просто нужно снова продвинуть таймеры, чтобы снова вызвать функцию:

jest.useFakeTimers();

test('rateLimit', () => {
    const action = jest.fn();

    const doAction = rateLimit(action, 100);

    doAction(); // This should increment the call count
    doAction(); // This shouldn't, because 100ms hasn't elapsed yet

    jest.advanceTimersByTime(101);

    doAction(); // This should increment the count again

    jest.advanceTimersByTime(101);  // <= advance the timers again

    expect(action).toHaveBeenCalledTimes(2);  // Success!
});
5
задан danmine 15 March 2009 в 23:54
поделиться

6 ответов

Это - хороший вопрос, но нет никакого абсолютного ответа для него:

Как отмечено Einstein:

Сделайте вещи максимально простыми, но не более простые.

Простота относительна. Принятие лучшего решения относительно количества уровней абстракции в дизайне - то, что делает великого архитектора великим. Хороший архитектор должен всегда оценивать конкретную ситуацию и делать лучший компромисс. Нет никаких серебряных пуль.

5
ответ дан 13 December 2019 в 05:43
поделиться

Две точки:

  • Все константы должны быть универсальными, т.е., сделать не когда-либо магические числа твердого кода, не помещая его в описательную константу.
  • Реализуйте минимум, в котором Вы на самом деле нуждаетесь - твердый код это, пока Вы не собираетесь копировать трудно кодированный код несколько раз - в этом случае, необходимо начать делать код универсальным. (Разработка через тестирование удивительна здесь).
1
ответ дан 13 December 2019 в 05:43
поделиться

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

Таким образом, я всегда пишу дублирующий код. Который в порядке, потому что я всегда осуществляю рефакторинг его впоследствии. Это - часть процесса написания кода, не чего-то для возвращения позже. Так как я следовал за TDD и только написал минимальный необходимый код, и так как я автоматизировал тесты, доказывающие, что код работает, если я нахожу дублирование, я могу осуществить рефакторинг его далеко в комфорте, зная, что я запущу свои тесты снова в течение и после рефакторинга. Это докажет снова, что я ничего не повредил.

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

2
ответ дан 13 December 2019 в 05:43
поделиться

Ваш вопрос был приспособлен к фактическому дизайну кода, чем, поместить ли переменные в конфигурационный файл или в константы. Я соглашаюсь с другими ответами относительно тех отношений.

Но относительно того, написать ли обобщенный код...

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

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

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

1
ответ дан 13 December 2019 в 05:43
поделиться

Я дам этому выстрел, моя философия следующие:

1 - Сохраните класс/функцию файла конфигурации и синтаксического анализатора, которые являются чрезвычайно dumbed вниз и просты как возможные дать Вам душевное спокойствие, что каждый раз, когда Вам нужно что-то от него, можно получить его, не имея необходимость инстанцировать смехотворно сверхчрезмерно увеличенного в размерах XML уплотнение синтаксического анализатора конфигурационного файла. Мой файл конфигурации похож на это:

DBHostname -> XX.XX.XXX.XX
DBUsername -> foomonger
DBName -> fooDb
DBPassword -> xxxxx
ImageUploadsDir -> /uploads/images/
...

Я извлекаю то, в чем я нуждаюсь от него с помощью или статического вспомогательного метода (небольшие приложения) или одноэлементного экземпляра (большой MVC управляемые приложения) сгенерированный моим слабоумным другом ConfigHelper, который является настолько немым, он не знает, как генерировать наверху.

У меня есть эта дилемма несколько раз в мой средний рабочий день: я должен поместить это в config.txt, или я должен сделать это классом постоянный? Мой ответ, я просто не знаю - значительно позже на. Если оказывается, что это должно было быть помещено в файл конфигурации, ничто не бьется, достойный IDE с конюшней 'Находят и Замена В реализации Проектов для изменения ссылок.

3 - Файлы конфигурации вынимают кошмар из развертывания приложения, когда разработка включает сервер тестирования, сопровождаемый развертыванием на производстве - нет никакой реальной практической альтернативы. Различные экземпляры базы данных на различных машинах имеют другого дюйм/с в мире, который я понимаю.

Один из многих примеров пишет HTML-код для веб-сайта вручную по сравнению с наличием программы, автоматически генерирующей его

Это таким образом верно. В то время как мы как разработчики любим создавать машины, мы склонны тратить впустую много машин создания времени для создания машины, которую мы первоначально намеревались создать. В то время как это может быть чрезвычайно приятно, на основе опыта я могу рисковать сказать, что в большинстве ситуаций, чем больше машин Вы имеете, тем больше систем Вы имеете для поддержки, чем больше точек из отказа, тем, более ручной вкусы Вы получать от бизнес-владельцы - и это не забава. Кроме того, Вы будете склонны сталкиваться с ситуациями, где промежуточная штука генератора HTML не может произвести желаемый вывод. Таким образом, что Вы делаете, напрасно тратьте время, исправляя ошибку в штуке генератора, напрасно тратьте время, разрабатывая обходное решение вуду или просто напишите от руки HTML? Это действительно зависит от конкретного обстоятельства, но я предпочитаю последнего.

Было что-то вроде напыщенной речи, но надежда она помогла ответить на Ваш вопрос, по крайней мере, немного.

3
ответ дан 13 December 2019 в 05:43
поделиться

80%? Совсем не достаточно хороший для твердого кодирования поместите его в файл конфигурации.

100%? Константа может сделать.

0
ответ дан 13 December 2019 в 05:43
поделиться
Другие вопросы по тегам:

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