Прийшов час осідлати справжнього Буцефала🏇🏻Приборкай норовливого коня разом з Newxel🏇🏻Умови на сайті
×Закрыть

DOU Проектор: Yes Cart — e-commerce платформа

От редакции:
В рубрике DOU Проектор все желающие могут презентовать свой продукт (как стартап, так и ламповый pet-проект). Если вам есть о чем рассказать — приглашаем поучаствовать. Если нет — возможно, серия вдохновит на создание собственного made in Ukraine продукта. Вопросы и заявки на участие присылайте на editors@dou.ua.

Начало

В далеких 2007-2008 я, Азарный Игорь, и Денис Павлов работали в Luxoft на компанию Elastic Path, которая производит решения для электронной коммерции. Но в 2008 году кризис привел к разрыву связей между Luxoft и Elastic Path. Обладая серьезными доменными знаниями и огромным желанием продолжить развивать данную экспертизу, я предложил руководству создать собственный e-commerce продукт с нуля. Но, к сожалению, предложение отвергнули, так как Luxoft не является продуктовой компанией.

Идея разработки собственного продукта не оставляла нас и начала обрастать конкретикой — каким хочется видеть продукт, какая функциональность, какие технологии будут использоваться, наброски архитектуры, кусочки кода. Работая с другими платформами, мы пониманили, что большая часть из них либо слишком тяжелые, например WebSphere Commerce, либо весьма специфические, как Apache ofbiz, либо просто очень медленные, как Magento. Поэтому хотелось создать продукт, по возможности лишенный недостатков, на проверенных технологиях, масштабируемый и легко адаптируемый под конкретные нужды.

Так получилась платформа YesCart, она решает свои задачи и вполне заслуживает на свое «место под солнцем».

Реализация

Наш опыт позволил нам достаточно быстро разрабатывать доменную модель и бизнес сервисы. Все прекрасно «ложилось» на стандартный стек технологий Java — Spring, Hibernate, использование Hibernate Search давало прекрасные возможности для поиска и фильтрации товаров по некоторым атрибутам. Например, выбор продуктов из одной или нескольких категорий, определенного производителя, в указанном диапазоне цен и обладающих набором определенных характеристик представляет собой пару строк по сравнению с громоздкими SQL запросами.

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

Интеграция с платежными системами также была полна сюрпризов, особенно одной из самых трудоемких стала интеграция с paypal express была — явно не express. А интеграция с google checkout была вообще остановлена по нескольким причинам: «корпорация добра» мало того, что требовала фактически все информацию о клиенте и его корзине, но еще и предоставляла ужасно неудобный API (позже Google закрыл этот проект).

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

Магазин. Первым серьезным вопросом стал выбор web технологии магазина. В наличии имелись требования по multistore и желание получить от web framework реальное сокращение трудозатрат. Использовать action based framework типа spring mvc не очень хотелось, на фоне рассвета component based framework-ов, HTML5 был весьма сырой. Поэтому мы испробовали четыре варианта — JSF Mojarra RI, Primefaces, Tapestry и Wicket.

Mojarra RI отпала по причине нарушения SOLID принципов, что вело к невозможности глубокой кастомизации framework. Primefaces содержали кучу ошибок при работе с data grid. А Tapestry не поддерживали backward compatibility, что было неприемлемо.

Выбор пал на Wicket, который задумывался как достаточно абстрактный framework, который теоретически мог работать как для desktop приложений на различных платформах, так и для web. Также у него хорошо проработанная архитектура, которая позволяет при минимуме затрат изменять поведение. Плюс данный framework имеет действительное разделение представления от данных и запрет на использование скриплетов на разметке страниц. С одной стороны, этот факт заставляет писать качественно, а с другой стороны, приводит к невозможности быстрого изменения страниц.

Административное приложение. Делать административное приложение как desktop приложение на Swing или Eclipse RCP не хотелось, Java Applets уже были мертвыми а Java FX версии 1 и вовсе представлял собой печальное зрелище.

После некоторых изысканий было принято решение использовать Flex, хотя понимание того, что рано или поздно Flash и Flex умрут, несколько омрачало картину. Писать на Flex было просто и быстро, даже без глубоких знаний Flex, Flash & Action Script. Плюс Adobe предлагал Blaze DS — библиотеку для интеграции со Spring.

Демо-каталог. Перед релизом платформы команде пришлось решать проблему, которая лежала вне плоскости разработки ПО — отсутствие каталога продуктов для демонстрационного магазина. Также без каталога невозможно произвести нагрузочное тестирование системы целиком. Создавать такой каталог, собирая информацию о продуктах — огромная потеря времени и демотивирующая работа. Сначала попробовали обратиться к cnet.com с просьбой о доступе к части их каталога товаров, но переговоры были не успешными. После долгих поисков в сети наткнулись на icecat.com.ua и получив от них разрешение на использование данных написали на groovy утилиту для импорта в Yes Cart.

Продукт. Первый релиз мы выпустили 26 Мая 2013 — 180 тыс. строк кода на Java, Action Script, HTML, Java script, etc и 60 тыс. строк комментариев. Это был полноценный коробочный вариант платформы, на основании ранних версий которого уже были запущенны магазины. На данный момент количество строк кода — около 300 тыс.

Поддержка responsive design обеспечивает покрытие практически любых устройств, на которых браузер поддерживает HTML5. В дополнение Yes Cat имеет REST API, который может использован для обеспечение покупок внутри приложений любого типа.

Еще хочу отметить такой функционал, как multi-shop — одно приложение обслуживает множество магазинов под разными доменными именами, каждый из которых может иметь свой собственный каталог, тему оформления, администраторов и прайс листы. Склады могут использоваться как общие, так и отдельные. То есть управление множеством магазинов может производится из одного административного приложения. Эта функциональность дает возможность развернуть новый магазин в течении нескольких минут. Например, это может быть полезно для организации сезонных, брендовых или продуктовых распродаж. Либо для проведения a/b тестирования.

Также мы создали и платную версию продукта, в которой магазин написан на groovy, расширена поддержка почтовых уведомление, редактирование шаблонов не выходя из административного приложения.

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

Сторонние проекты. Во время работы над проектом некоторая разработанная функциональность обрела собственную жизнь как отдельные продукты. Например, стало понятно, что использование персистентных доменных объектов на UI является анти-паттерном. Поэтому Денис создал превосходный Object Mapper — GeDa, который заслуживает отдельной статьи.

Дальнейшие планы

На данный момент избавляемся от тяжкого наследия — Flex, что позволит в ближайшем будущем обновить версии Spring & Hibernate.

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

Выученные уроки, или чтобы я сделал не так:
— Недооценили масштаб проекта и его объем;
— Полностью выпали из оценки по документированию проекта;
— Осознанное решение об использовании Flex принесло выигрыш только на первых этапах. Надо было использовать web-services вместо amf протокола;
— Отказ от Spring MVC и использование Apache Wicket— весьма неудачное решение. Привело в повышению «входного порога» для потенциальных пользователей;
— Даже для ОСС проектов необходим PR менеджер или человек, который будет активно продвигать решение;
— Изначальное не продумали модель монетизации. Писать открытый проект — замечательно, но получать прибыль тоже полезно и приятно.

Посмотреть примеры работы платформы можно здесь: abc-style.com.ua/yes-shop, multimediastore.ch, demo.yes-cart.org/yes-shop.

LinkedIn

Похожие статьи

38 комментариев

Подписаться на комментарииОтписаться от комментариев Комментарии могут оставлять только пользователи с подтвержденными аккаунтами.

А можно несколько нескромный вопрос — где деньги?
Т.е. есть вот 60 (или сколько там) тысяч читателей ДОУ, наверняка у многих есть какие-то идеи open source платформ, и хотелось бы узнать какие-то советы о том, как запустить успешную платформу.

Т.е. как вы нашли ресурсы ее разработать (мотивировали разработчиков работать бесплатно/или же у вас были инвестиции)
Как вы понимаете, что это кому-то нужно:
Зарабатывает ли проект хоть что-то сейчас?
Какие метрики вы отслеживаете — количество магазинов на вашей платформе, или же количество разработчиков, которые используют ее?
Как находятся «клиенты» и кто они?

Цікавий проект ) Хлопці, я можу допомогти із дизайном та адаптивністю проекта на громадських засадах ) Маякуйте

Дуже дякую, будемо раді якщо зможете допомогти. Будь ласка з’яжіться з нами за допомогою www.yes-cart.org/index-uk.html#contact

Очень интересная статья в плане подхода в реализации продукта. НО я так и не понял, чем продукт лучше того же Magento ? Magento поддерживает весь функционал, который Вы описали в комментариях. Скорость? Да, при достижении определенного уровня нагрузки Magento будет тормозить, но это вполне решаемо.
Вобщем хотелось бы видеть следующую статью с темой типа «Как мы решили все проблемы e-commerce бизнеса и оставили популярные CMS позади».

Привіт.
Успіхів у просуванні!

Одна помітка: замініть лінк з google code на github (на сайті).

Дякую, лінка на google code у розділі «архів». Поточні ресурси в меню «Ресурси» (вибачте за тафтологію)

И все таки не понял — для кого этот продукт? Кто потенциальные пользователи?
Функционал платформы — такое дело. Голые 1С, Eclipse RCP, Liferay-xWiki, Magento, ... RoR, .... интересны удобством наращивания функционала. Для ИТ бизнеса — удобство конвертируется в стоимость.

Как по вашему — расширять, изменять функционал платформы удобно? Какая квалификация для этого требуется? и т.п.

Сергей, для наращивания/изменения функционала в 90% случаев на данный момент regular java developer со знаниями Spring, Hibernate, MVC, MySQL, Flex . Думаю это не является проблемой. В течении некоторого времени Flex отпадет и станет все проще.
Продукт для тех кому WebSphere commerce — тяжело, Hybris — дорого, Magento — «религия» не позваляет.

в 90% случаев на данный момент regular java developer со знаниями Spring, Hibernate, MVC, MySQL, Flex . Думаю это не является проблемой.
а я знаю что это — Проблема :)
Magento — «религия» не позваляет.
кроме Magento на рынке полно предложений. для доработки которых не нужен программист по цене «regular java developer». а если у него такая цена, то на гора он будет выдавать больше функционала за час рабочего времени.
WebSphere commerce — тяжело, Hybris — дорого,
то есть для желающих выйти на рынок SaaS, платформа для своего Shopify?
или для транснациональных торговых сетей?

Согласен, что наличие специалиста определенного профиля является одним из критериев выбора.
Мы стремимся туда, но пока «подчищаем» старые ошибки, которые не позволяют это быстро сделать.

Сергей и Игорь, я думаю Вы оба правы, однако смотрите на проблему с «разных сторон бюджета».

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

YesCart расчитан на средний и крупный бизнесс которые нуждаются в поддерке емких каталогов товаров 50тыс и выше, либо заказчиков с большим количеством клиентов, а также таким моделям бизнесса как сдача онлайн магазинов в аренду (multi-tennancy) и онлайн базар (marketplace)

Именно по этому в комментариях Игоря «скорость» являлась одним из ключевых аттрибутов.

Теперь к вопросу о специалистов.

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

Однако, YesCart направлен на заказчиков которые хотели бы Hybris, Intershop и ATG, но в то же время не обанкротиться на лицензии. Я не говорю, что YesCart еще на том уровне по функционалу, но очень многое реализовано и мы на верном пути к достижению этой цели.
Исходя из этого, как сказал Игорь, специалисты это не проблема так как мы придеживаемся популярных и проверенных временем технологий, что позволяет интеграторам быстро адаптироватся под YesCart.

У Вас на Java Scaffolderов нет? Переходить на новый язык, для админки, как то звучит жутковато. Она какая-то динамичная особо?

Переходить на новый язык ? Мы наоборот выкидываем flex и action script.

В статье я не совсем понял, зачем был надо Flex, а то что выкидываете и куда идёте, тоже не вижу!

Странно конечно, но


Административное приложение. Делать административное приложение ...
причины почему он надо был некоторое время назад.
На данный момент избавляемся от тяжкого наследия — Flex, что ....
почему выкидываем ....
Спасибо
зачем был надо Flex?
Под этим подразумевал «зачем применяли именно его?».
куда идёте?

Во время принятия решения Flex был идеальным кандидатом для написания интерфейса админ приложения (имеется ввиду «клиента» так как сервер на java). Почему идеальный? потому что содержит полный набор элементов для форм и презентации данных в различных формах (таблица, дерево и.д.), а mxml делает разработку почти ничем не отличающуюся от разработки HTML страниц + JavaScript (естественно со своими тегами, но принцип очень похожий). Также посредством библиотеки BlazeDS идеально подходил для связи с java сервером. То есть, основными причинами было простота разработки и полная поддерка функциональности необходимой нам.

Честно говоря, если бы Flex+BlazeDS не был в заброшеном состоянии он и до сих пор являлся идеальным кандидатом. Однако время не стоит на месте и мы бы хотели обновить некоторые библиотеки. При анализе зависимостей опредилили, что из-за BlazeDS есть определенные сложности, а альтернатив к сожалению нет. Поэтому и решили переписать клиентскую часть админ приложения (серверная останется как есть — java + web сервисы)

Вам би дизайнер не завадив, виглядає все це як привіт з 90х.

Так, демо можно зробити и краще. Приєднуйтесь або зробить декілька варіантів дізайну.

Це тільки лендінг такий (нормально виглядає під 1366×768),
якщо зайти в демо-режим, то там звичайний Bootstrap :-)

Так звичайний Bootstrap, бо на сьогодні це de facto стандарт.

Але хочу зауважити що це тільки дефолтна тема. На її базі можливо розробити будь-які нові а потім вмикати потрібну з адмін консолі.
Ось лінки на документацію:
Теми www.inspire-software.com/...ence/display/YC3EN/Themes
А ось тут вмикати www.inspire-software.com/...nces#Shopinstances-Themes

Узнаю подход технарей.
После прочтения так и не понял самого главного — какую проблему решает проект?
Почему Ваш продукт это делает лучше других и лучше ли?
С чего Вы взяли что «медленность» как в Магенто вообще имеет значение для таких продуктов?
Кто Ваши пользователи? Сколько их? За что они готовы платить?

Много технической информации (которая с бизнес точки зрения совершенно не нужна) и фактическо 0 по бизнес части.

Дмитрий, продукт решает проблемы с которыми пришлось столкнутся при работе с «тяжелыми» e-commerce платформами. Что-то мы делаем лучше, что-то хуже, вопрос скорее всего не в этом, а подходит ли и по каким критериям продукт пользователю. В общем скорость отдачи в конечном итоге влияет на сумму денег, которую заработает ретейлер, а так собственно говоря больше ни на что ;) В e-commerce на данный момент пользователи по большей части готовы платить за кастомизицию и интеграцию, за продукт в меньшей степени, т.к. конкуренция большая.
Узнаю подход менеджера среднего звена — по больше вопросов, хотя ответы по большей части есть в документации. Специально для менеджера она разбита на 2 части — техническая и для бизнес пользователей. Просто впихнуть все не позволяет формат статьи.

а подходит ли и по каким критериям продукт пользователю.

Возможно именно это нужно было бы раскрыть тут?

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

Давайте будем откровенны. Цель любого проекта — заработать. Для того чтобы заработать нужно себя как-то позиционировать на рынке. Выделить сильные, слабые стороны. Продать это НАМ в конце концов.

В любом случае желаю Вам удачи.

Скорее всего это выходит за рамки этой статьи. Возможно это совершенно другая статья которой будет освещена проблема выбора ? Кому-то заливка товаров из табички в экселе — важно, а кто-то на это не обращает внимания т.к. продает с сотню продуктов всего. Я думаю что ее писать должен и не технарь и не менеджер. Да, забыл сказать — в изначальном варианте статьи , как и с документации, был перечень фенкционала, но его подрезал редактор. Ну и документация которая Вас интересует — www.inspire-software.com/.../YC3EN/For Business Users
а для технарей www.inspire-software.com/...YC3EN/For Technical Users
Спасибо

Узнаю подход менеджера среднего звена — по больше вопросов, хотя ответы по большей части есть в документации. Специально для менеджера она разбита на 2 части — техническая и для бизнес пользователей. Просто впихнуть все не позволяет формат статьи.
Вот так и про***ся все потенциальные инвесторы...

Були б вдячні, якби описали хоча б ще кілька переваг крім швидкодії.

На вскидку.
1. Поддержка мульти-магазинов и хостинг неограниченного количества магазинов на сервере
2. Конфигурация бренда (темы) магазинов и индивидуальные настройки
3. Гибкая структура каталога и поддержку мульти SKU
4. Запуск нового магазина в течении минуты, имеется ввиду не старт web server.
5. Полная поддержка интернационализации и локализации
6. Полная поддержка поисковой оптимизации (SEO) магазина, категорий,контента, продукции и SKU
7. Полнотекстовый поиск и навигация включая категории, бренды, цены, атрибуты, товарные тэги с конфигурируемой релевантностью с учетом мульти SKU. Например при поиске товара, который является multi sku будет показан наиболее релевантный с учетом складских остатков.
8. Нечеткой поиск — опечатки, синонимы, стоп-слова·
9. Поддержка акции для товаров, заказов и доставки с поддержкой промо-кодов, сезонных цены, распродаж, оптовых скидок.·
10. Полный жизненный цикл заказ начиная от создания, оплаты и заканчивая доставкой и поддержкой процесса возвратов. Так например при возврате товара refund может происходит автоматически.
11. Неограниченное количество прайс-листов для множества валют, которые могут быть использованы для сезонных продаж и оптовой торговли

Дякую, це якраз те, що хотілось почути :-)

Ще таке запитання, чи можна десь почитати про конфігурацію серверів на який працює ваш проект, щоб оцінити витрати на конкретно вашу і аналогічну платформу?

Полная поддержка интернационализации и локализации
Я не вижу на www.multimediastore.ch перехода на французский язык (а всего в швейцарии 4 государственных языка). Довольно много стран имеют более одного государственного языка — Бельгия, Канада, Индия, некоторые штаты США...
Т.е. контент товара, структура каталога, должен быть представлен на произвольном количестве языков, а реляционные базы имхо не особо удобны для этого.

По скорости работы — результаты demo.yes-cart.org действительно значительно лучше чем у magento, и наверняка могут быть улучшены за счет «железа» еще раз в 5:
loadme.socialtalents.com/.../56a775155b5f160cfc666b6b

Довольно много стран имеют более одного государственного языка — Бельгия, Канада, Индия, некоторые штаты США...
Т.е. контент товара, структура каталога, должен быть представлен на произвольном количестве языков

Совершенно с Вами согласен, и это именно так, как работает YesCart.

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

Немного об i18n наприсано в документации www.inspire-software.com/...ternationalisation (i18n

YesCart расчитан на средний и крупный бизнессы, и иногда, сложности в имплементации некоторого функционала лежат в наличии качественных данных каталога, поскольку обработать 50тыс пртикулов (как на Мультимедиа) — это трудоемко.

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

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

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

Хотел поинтересоваться — даже если формат статьи на читателя с технической стороны, что в этом плохого? Ведь DOU создан именно для них? Разве, это делает статью плохой или не интересной?

Не сочтите за грубость, и я заранее приношу извенения если мой вопрос кого-то обидет, но какую пользу приносит Ваш коментарий читателю этого поста и что все нижеподписавшие в нем «поддерживают» ?

Мне кажется любой труд достоин уважения и поддержки.

Хороший продукт, успіхів в просуванні!

Подписаться на комментарии