Как электронная коммерция в Интернете использует фабричную модель?

Java Шаблоны проектирования
Как электронная коммерция в Интернете использует фабричную модель?

Есть чувства, есть галантерейные товары, поиск в WeChat【Третий принц Ао Бин] Подпишитесь на этого программиста, у которого есть кое-что.

эта статьяGitHub github.com/JavaFamilyВключено, и есть полные тестовые площадки, материалы и мой цикл статей для интервью с производителями первой линии.

предисловие

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

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

И когда я хочу познать всю глубину технологии (посмотреть исходный код фреймворка), я всегда чувствую, что понимаю только поверхность, а не идею внутри.

Все здесь должны знать, что я пытаюсь сказать, это правильно设计模式, На самом деле, это тоже мой первый год работы и второй год я думаю над проблемой, зачем мне изучать шаблоны проектирования? Каковы преимущества шаблонов проектирования?

  • Улучшить возможность просмотра исходного кода фреймворка
  • Улучшите свои навыки проектирования кода и возможности кода для сложной бизнес-логики
  • Заложите прочную основу для собеседований и последующих карьерных путей

Например, когда я раньше занимался электронной коммерцией, мой друг, который проводил мероприятие на месте, использовал модель цепочки ответственности + фабрика + синглтон, мне нужно было только несколько типов фабрик, а затем цепочка ответственности была передана и повторно использовал его синглтон Это нормально, это преимущество шаблонов проектирования, вы можете установить X, а также принести пользу будущим поколениям.

текст

я поговорю сегодня工厂模式, применение фабричной модели в нашей области электронной коммерции очень обширно. Перед тем, как написать это, я посмотрел код своего собственного компьютерного проекта, и он был везде.

Фабричный шаблон можно в основном разделить на три категории:

  • Простой заводской шаблон
  • Шаблон фабричного метода
  • Абстрактный инженерный шаблон

Сегодня я сосредоточусь в основном на этих трех режимах, чтобы привести пример для понимания.

Простой заводской шаблон

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

Например, как мой предыдущий бизнес электронной коммерции создавал и создавал продукты:

На этой простой фабрике, если мы хотим создать активный товар 1 и активный товар 2, когда мы хотим создать товар, нам нужно только вызвать метод создания товара в простой фабрике, создать разные товары в соответствии с типом, а затем материализовать и вернуть их.

Несколько реализаций простой фабрики:

статический заводской шаблон

Мы по-прежнему сосредоточены на создании продуктов

Вроде бы и нет проблемы в создании таким образом.Разные продукты создаются по типу,но есть проблема,не знаю,нашли ли вы ее?

Каждый раз, когда я добавляю один类型Должен ли я изменить if else метода createProduct? Не нарушает ли это наш принцип открытого-закрытого?

Так что этот метод не годится, у нас есть два других варианта:

  • Использовать механизм отражения

  • Зарегистрируйте товарный объект напрямую, добавьте метод типа Type и верните метод того же типа в соответствии с типом типа

    Точно так же мы по-прежнему используем создание продуктов в качестве столбца: реализация отражения

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

Здесь есть еще одна проблема.Неправильное применение отражения может легко привести к проблемам с онлайн-машиной, потому что свойства объектов, созданные нашим отражением, мягко ссылаются на SoftReference, поэтому, когда **-XX:SoftRefLRUPolicyMSPerMB** не установлен, он будет Держите машину в рабочем состоянии.

Конечно, его значение по умолчанию равно 1000, и это зависит от ситуации каждого, так или иначе, просто обратите внимание на этот момент.

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

Шаблон фабричного метода

Шаблон фабричного метода является усовершенствованием статического фабричного шаблона.Наш фабричный класс напрямую абстрагируется, а логический код, который должен быть конкретным, передается в подкласс, который реализует абстрактный метод, так что нам не нужно изменять фабричный класс (то есть: нет необходимости делать какие-либо дополнительные модификации if else).

Или возьмем пример создания продукта:

Глядя на эту картинку, на самом деле можно сказать прямо, а затем создать фабрику для создания объекта класса фабрики.

Далее посмотрим, как код реализует эту функцию:

Здесь мы сначала создаем абстрактный фабричный метод

Создайте еще одну товарную фабрику, чтобы унаследовать метод абстрактной фабрики.

Когда есть другие типы, нам просто нужно наследовать созданный нами фабричный метод.

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

Я приведу вам другой пример:学以致用

Предположим, теперь руководитель хочет, чтобы вы сфотографировали общий продукт.Мы знаем, что существует много типов продуктов, таких как продукты без SKU, продукты с SKU, обмен заказами, обмен приглашениями... и ряд сценариев. Так как же сделать этот код более понятным, легко читаемым и расширяемым в будущем?

ps: sku и spu - это термины в нашей электронной коммерции. spu - это почти то же самое, что и item, то есть товар. Товарная позиция имеет много sku. Например, iphone - это товар, а также товар и spu. белый iphone 12 64G — это конкретный артикул.

Первым шагом должно быть определение шаблона создания и совместного использования.

На втором этапе мы создаем общую фабрику, чтобы получить экземпляр компонента, который мы предварительно загрузили в контейнер Spring в соответствии с нашим типом.

Последнее - определить наши различные типы для обмена изображениями.

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

Итак, вопрос в том, когда использовать шаблон фабричного метода вместо простого фабричного шаблона?

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

Использование простого фабричного шаблона и помещение всей логики создания в фабричный класс приведет к тому, что фабричный класс станет очень сложным.

Абстрактный заводской узор

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

В классе фабричных методов есть только один абстрактный метод.Если вы хотите реализовать множество разных объектов класса, вы можете создавать подклассы только разных конкретных фабричных методов для реализации сериализации, в то время как абстрактная фабрика позволяет фабрике нести ответственность за создание нескольких разных типов.

Это немного сбивает с толку, чтобы понять, давайте нарисуем картинку

Внешний вид может быть немного некрасивым, но он может объяснить проблему.На самом деле, похоже, что его можно разделить на следующие части:

  • абстрактный фабричный класс
  • определенный заводской класс
  • абстрактный класс

Лично я могу понимать абстрактный класс фабрики как мобильный телефон, который только что вышел из фабрики Конкретная абстрактная фабрика состоит в том, чтобы думать, что у каждого из нас есть индивидуальные настройки для этих обоев мобильного телефона Наконец, я понимаю, что абстрактный класс — это обои для мобильного телефона.

Каждый из нас может настроить различные обои, такие как: сестра с движущимся изображением, пейзаж с неподвижным изображением, маленький дурак и так далее.

конец

За время работы в нескольких e-commerce компаниях я повидал много кода от больших парней.Как бы это описать,это всевозможные шаблоны проектирования,выглядит действительно непобедимо и изящно,а потом очень удобно когда подключаем , просто передайте параметры напрямую. Хорошо.

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

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

Я Ао Бин,Чем больше вы знаете, тем больше вы не знаете, спасибо за ваши таланты:как,собиратьиКомментарий, увидимся в следующий раз!


Статья постоянно обновляется, вы можете искать в WeChat "Третий принц Ао Бин"Прочтите это в первый раз, ответьте [материал] Подготовленные мной материалы интервью и шаблоны резюме крупных заводов первой линии, эта статьяGitHub github.com/JavaFamilyОн был включен, и есть полные тестовые сайты для интервью с крупными заводами.Добро пожаловать в Star.