Временный файл замены с запросом

Это вопрос мышления. Вы должны найти «двойную» форму вашего вопроса (-> двойное отрицание).
Вам нужно найти все заказы, по крайней мере, на одной строке, которые еще не готовы.

Предполагая, что ваши таблицы являются общими:
Order ( ID , bla, bla, bla) и Строка заказа ( orderID, строка № , статус, бла, бла) FK или порядок ссылок ссылок.
Вы можете использовать эту заглушку:

Select *
from orders O
where not exists ( select * from order_line OL 
                   where ol.orderID=O.orderID  --binding with outer query
                   and status <> 'ready' 
                  )

ПОБОЧНОЕ ПРИМЕЧАНИЕ: мой запрос будет выдавать также пустые ордера, чтобы отфильтровать их, просто добавив к внешнему запросу and exists (select * from orderline oe where oe.orderid=o.orderid)

11
задан Line 5 October 2018 в 11:01
поделиться

4 ответа

Считав веб-страницу Fowler на нем, я не вижу преимущества для выполнения его тот путь. Единственное возможное усиление путем изоляции выражения, которое может часто использоваться в одно место, но это было бы лучше всего обработано:

    double basePrice = basePrice();
    if (basePrice > 1000)
            return basePrice * 0.95;
    else
            return basePrice * 0.98;

Fowler не предлагает объяснения, почему его пересмотренный код лучше, чем оригинал, кроме прочитать его книгу.

6
ответ дан 3 December 2019 в 03:37
поделиться

Это предназначается, чтобы быть более разоблачающим намерения кода. В некоторых случаях этим можно злоупотребить, но вряд ли. например, Вы могли обновить запросы для 5%-х и 2%-х скидок с запросами, но от имени методов Вы могли описать в причине имени скидки. помните, это может быть очевидно сегодня, но через 6 месяцев это не могло бы быть так - как я говорю - не вопрос, если я забываю, но когда я забываю.

  if (basePrice() > 1000)
     return bigTicketDiscount()
  else
     return regularDiscount()

double bigTicketDiscount(){
  return basePrice() * 0.95;
}

double regularDiscount(){
  return basePrice() * 0.98
}
3
ответ дан 3 December 2019 в 03:37
поделиться

Мне действительно кажется, что путем выполнения этого Вы помогаете сделать единственную цель к своему исходному методу; Это больше не ответственно за вычисление basePrice и сниженной цены (или независимо от того, что случается так, что это вычисляет). Это - пример принесения в жертву некоторых циклов ЦП для создания кода более удобным в сопровождении. "Потраченные впустую" циклы CPU - вероятно, не что-то, что Вы заметите для одного, и также возможно, что компилятор мог оптимизировать его (возможно, замечая, что метод относительно прост и вместо того, чтобы назвать метод, это вводит фактический код (больше как макрос). Так или иначе эти типы оптимизации лучше всего оставляют машинам, оставляя людей с более чистым кодом, чтобы продолжить работать.

0
ответ дан 3 December 2019 в 03:37
поделиться

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

4
ответ дан 3 December 2019 в 03:37
поделиться
Другие вопросы по тегам:

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