Наш проект имеет ~ 40 таблиц со сложными отношениями. Коллега верит в использование длинных запросов на объединение, которые заставляют меня узнавать о таблицах вне моего модуля, но я думаю, что я не должен относиться к таблицам, не связанным напрямую с моим модулем, и использовать доступ к данным функции (написанные теми, кто отвечает за другие модули), когда мне нужны данные из них. Позвольте пояснить:Усиливает ли комплексные соединения большие проблемы с соединением и обслуживанием?
Я отвечаю за модуль ContactVendor, который позволяет клиентам связаться с поставщиком и начать разговор о каком-то конкретном продукте. Модуль продуктов имеет собственные сложные таблицы и отношения с функциями, которые инкапсулируют детали (например, i18n, активация, доступность продукта и т. Д.). Теперь мне нужно показать название продукта какого-либо продукта, связанного с некоторой беседой между продавцом и клиентами. Я могу либо написать длинный запрос, который извлекает информацию о продукте вместе с материалами беседы одним выстрелом (который принуждает меня узнать о таблицах продуктов). Или я могу передать соответствующий product_id функции get_product_info (int).
Первый подход, очевидно, требует и вводит много плохих практик и вещей, которые я обычно рассматриваю как недостаток в программировании. Проблема со вторым подходом, по-видимому, заключается в бесчисленных мини-запросах, вызванных этими функциями доступа, и потеря производительности вызывает беспокойство, когда цикл пытается получить заголовки продуктов для 100 продуктов, используя функции, каждый из которых выполняет отдельный запрос. Поэтому я застрял между «не кодовым кодом реализации, кодом для интерфейса» и производительностью. Каков правильный способ делать вещи?
ОБНОВЛЕНИЕ: меня особенно беспокоят возможные будущие изменения этих таблиц за пределами моего модуля. Что, если модуль «Продукты» решил изменить то, как они это делают? или по какой-то причине изменить схему? Это означает, что некоторые другие модули сломаются или будут работать неправильно, пока изменения не будут интегрированы в них. Обычная проблема эффекта пульсации.
Я вижу, но что, если модуль продукта решил изменить его схему? не приведет ли к этому эффект рябины многих модулей? Если, с другой стороны, все остальные модули получают доступ к продуктам с использованием интерфейса, предоставляемого модулем Product, тогда ничего не пойдет не так (я надеюсь! ;-)) –
@ ashkan.kh: Мой ответ был слишком длинным, поэтому я добавил его выше в ответе. – MJB