Monthly Archives: April 2011

nopCommerce

Для платформы ASP .NET мало хороших CMS. Еще меньше бесплатных хороших CMS. И совсем нет бесплатных хороших CMS для электронной коммерции :)

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

Коммерческие разработки вроде Kentico хороши, но стоят денег. А Sitecore вообще шифруется: цены я смог получить только после недельного ожидания и нескольких часов разговоров с их продажниками в Дании :) Минимальная версия SItecore вышла бы нам в 9900 евро. Максимальная что-то около 83000 евро.

Среди бесплатных CMS для электронной коммерции есть, пожалуй, лишь один серьезный продукт. Это nopCommerce. Российская разработка: разработчики из Ярославля. Open Source. Деньги берут за документацию и за право не ставить на сайте их логотип.

Функционал довольно мощный. Скидки, налоги, оплата, доставка, возвраты товаров, рейтинги, отзывы, форум, новости, статьи… Общий объем кода около 15 мегабайт, количество таблиц в БД превышает сотню.

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

Чудеса начинаются, когда нужно хорошенько кастомизировать магазин. Тут-то выясняется, что архитектура слегка страдает.

Например, что делать, если нужно добавить поле в какую-то таблицу? В Kentico, Sitecore или даже в бесплатной Umbraco для этого достаточно зайти в веб-интерфейс администрирования сайта в раздел “Developer” и отредактировать список полей нужной сущности. Что нужно сделать в nopCommerce для решения этой задачи? Процесс очень простой. Вот здесь он описан подробней.

1. Добавить свойство в соответствующий класс

2.Обновить методы репозитория (Update/Insert)

3. Добавить поле в таблицу базы данных

4. Обновить модель Entity Framework (edmx файл)

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

Добавить новую сущность? Без проблем, только шагов будет пять.

О качестве кода говорить не буду, лучше оцените сами :) Там, например, местами HTML собирается в code-behind из html generic controls. Хорошо хоть не конкатенацией строк. И кода этого 15 мегабайт.

Почему же всё так грустно в мире CMS для e-commerce? Есть что-то более приятное для e-commerce?

Павел Сурменок

http://surmenok.ru/, зеркало в ЖЖ: http://surmenok.livejournal.com/

http://pavel.surmenok.com/ – English-only version

Иерархические списки в SharePoint

Как-то внезапно в зону моих интересов (и интересов моих заказчиков) попал SharePoint. Сейчас мы (компания BetaCode) занимаемся проектом по внедрению SharePoint и интеграции его с Microsoft Team Foundation Server и Microsoft Project.

Одна из технических задач – создание иерархического списка Tasks с неограниченной вложенностью.

Провели исследования и выяснили, что подходов по созданию иерархий в SharePoint несколько.

Во-первых, можно создать несколько Lookup column: Parent1, Parent2, … , Parent10. И соответственно у элемента второго уровня вложенности задавать Parent1, у элемента третьего уровня – Parent2 и т.п. Далее в View делаем группировку по Parent1, Parent2 и т.п. Это как-то коряво, и это не даёт неограниченной вложенности.

Во-вторых, как вот здесь я узнал, начиная с версии 2007 можно делать интересную штуку. Можно создать тип контента, наследующий Folder. И получим для наших элементов поведение схожее с папками, т.е. можно вкладывать их один в другой.

Это очень просто реализуемый вариант. Но не лишен недостатков. Так, в стандартном View можно смотреть список только каждого уровня в отдельности. Т.е. при открытии списка видим только корневые элементы, при открытии кого-то из этих корневых – видим его дочерние элементы. В общем всё как обычно с папками. А хотелось бы сразу видеть дерево. Примерно как в TFS в запросах Iteration backlog.

В-третьих, можно добавить одну Lookup column Parent, с помощью которой задавать отношения Child-Parent между элементами. А View разработать свой. При этом придется раскуривать объектную модель SharePoint и написано некоторое количество хорошо отлаженного кода :) При этом хорошо бы воспользоваться толковым контролом для отображения иерархических списков. Например DevExpress TreeList или что-то подобное подешевле.

Возможно позже напишу более подробно о том, как эту задачу решать. Когда закончим.

Павел Сурменок

http://surmenok.ru/

http://pavel.surmenok.com/