Информация об изменениях

Сообщение Re[5]: А если бы все с начала ? от 17.01.2018 18:37

Изменено 17.01.2018 18:54 Sinclair

Re[5]: А если бы все с начала ?
Здравствуйте, Sharov, Вы писали:
S>Если не правильно составил запрос -- логическая ошибка, как типизация поможет?
Точно так же, как она помогает в обычных языках. Это в K&R С можно было перепутать местами адрес строки и номер позиции в ней, и компилятор бы и бровью не повёл.
Современный C зачем-то отличает char* от int.

А вот жизнь всем разработчикам субд осложнила бы. Да и от диалектов это бы не спасло.
S>Про декомпозицию вообще не понял.
Попробуйте написать функцию, которая возвращает список заказов, а в параметрах принимает список менеджеров.
Чтобы можно было, скажем, передать туда не XML (омг!), а, к примеру, select manager_id from managers where RegionCode = "LATAM"
А в другом месте — select manager_id from managers where RegionCode = "LATAM".
Классика жанра — постройте мне table-valued функцию, которая возвращает список заказов по заданным параметрам.
При этом параметры могут быть NULL, что означает "не фильтровать по заданному параметру".

На строго типизированном linq это нефиг делать:
if (startDate.HasValue)
{
  q = from s in q where s.Date >= startDate.Value select s
} 
if (endDate.HasValue)
{
  q = from s in q where s.Date <= endDate select s
}

На T-SQL вы либо убьёте производительность, написав длиннющюю простыню из OR startDate is NULL, либо будете мучительно клеить строки и вызывать EXEC, надеясь что в продакшне не стрельнет редкое сочетание параметров или что там не затешется SQL injection.
Re[5]: А если бы все с начала ?
Здравствуйте, Sharov, Вы писали:
S>Если не правильно составил запрос -- логическая ошибка, как типизация поможет?
Точно так же, как она помогает в обычных языках. Это в K&R С можно было перепутать местами адрес строки и номер позиции в ней, и компилятор бы и бровью не повёл.
Современный C зачем-то отличает char* от int.

А вот жизнь всем разработчикам субд осложнила бы. Да и от диалектов это бы не спасло.
S>Про декомпозицию вообще не понял.
Попробуйте написать функцию, которая возвращает список заказов, а в параметрах принимает список менеджеров.
Чтобы можно было, скажем, передать туда не XML (омг!), а, к примеру, select manager_id from managers where RegionCode = "LATAM"
А в другом месте — select manager_id from managers where director_id = 850.
Классика жанра — постройте мне table-valued функцию, которая возвращает список заказов по заданным параметрам.
При этом параметры могут быть NULL, что означает "не фильтровать по заданному параметру".

На строго типизированном linq это нефиг делать:
if (startDate.HasValue)
{
  q = from s in q where s.Date >= startDate.Value select s
} 
if (endDate.HasValue)
{
  q = from s in q where s.Date <= endDate select s
}

На T-SQL вы либо убьёте производительность, написав длиннющюю простыню из OR startDate is NULL, либо будете мучительно клеить строки и вызывать EXEC, надеясь что в продакшне не стрельнет редкое сочетание параметров или что там не затешется SQL injection.