Давайте предположим, что вы пишете заявку для сети розничных магазинов.Таким образом, вы должны разработать свою объектную модель так, чтобы вы определяли «Store» как основной бизнес-объект и множество вспомогательных объектов.Допустим, «Магазин» выглядит следующим образом:
class Store implements Validatable{
int storeNo;
int storeName;
... etc....
}
Итак, ваш клиент говорит вам, что вам нужно импортировать расписание магазина из таблицы Excel в приложение, и вам нужно будет запустить серию проверок ».Эм.Например, «StoreIsInSameCountry»; «StoreIsValid» ... и т. Д. Итак, вы должны разработать интерфейс правил для проверки всех бизнес-условий.Примерно так:
interface Rule T extends Validatable> {
public Error check(T value) throws Exception;
}
Теперь возникает вопрос.Я загружаю 2000 магазинов из этого листа Excel.Таким образом, я бы закончил выполнение каждого правила, определенного для магазина, много раз.Если бы у меня было 4 правила = 8000 запросов к базе данных, то есть 16000 обращений к пулу соединений.Для простой проверки, где мне просто нужно проверить, существует ли хранилище, запрос будет выглядеть так:
SELECT STORE_ATTRIB1, STORE_ATTRIB2... from STORE where STORE_ID = ?
Таким образом, я получу свой объект Store.Когда я ничего не получаю из базы данных, тогда этот магазин не существует.Итак, для такой простой проверки мне пришлось бы обращаться к базе данных 2000 раз для 2000 магазинов.
В качестве альтернативы, я мог бы просто сделать:
SELECT STORE_ATTRIB1, STORE_ATTRIB2... from STORE where STORE_ID in (1,2,3..... )
Этот запрос на самом деле будет возвращаться намного быстрее, чем выполнение запроса выше 2000 раз.Тем не менее, не очень хорошо с дизайном, что правило может быть запущено только для одного магазина.
Я знаю, что использование IN не является рекомендуемой методологией.Итак, что вы думаете, я должен делать?Должен ли я пойти дальше и использовать IN здесь, потому что это дает лучшую производительность в этом сценарии?Или я должен изменить свой дизайн?
Что бы вы сделали, если бы вы были на моем месте, и какова лучшая практика?