Sitecore и ASP.net MVC - PullRequest
       18

Sitecore и ASP.net MVC

35 голосов
/ 20 августа 2009

Мы начинаем новый проект с sitecore в качестве нашей CMS. Я думал об использовании Sitecore в качестве инструмента создания контента и использовании ASP.net MVC, как на стороне доставки контента (CDA), наряду с Sitecore. Хотелось бы услышать ваши идеи и мысли по этому поводу.

Кто-нибудь пробовал это?

Являются ли sitecore и MVC конкурирующими или дополняющими технологиями?

Любые архитектурные идеи приветствуются.

Ответы [ 9 ]

25 голосов
/ 03 ноября 2009

В некоторых случаях объединение этих двух функций может принести огромную пользу. MVC не очень подходит для сайтов, ориентированных на контент. Тем не менее, веб-приложения со структурированным потоком и множественным представлением данных извлекают из этого огромную пользу Когда дело доходит до нескольких представлений данных, у Sitecore есть некоторое ограничение - вы можете определить только один набор деталей дизайна для элемента. Если у вас нет требований к редактированию WYSIWYG или простому предварительному просмотру одним щелчком, вы можете использовать Sitecore в качестве хранилища данных и использовать некоторые значения контекста, полученные из его конвейера (например, язык).

Для работы HTTP-конвейера Sitecore необходима пара модификаций:

1) При использовании расширения aspx в IIS6 для получения ASP.NET для обработки запросов MVC (например, /Controller.aspx/Action) исправьте синтаксический анализ SitePore FilePath (существует ошибка в том, как Sitecore разрешает FilePath, что приводит к путь рубят).

Чтобы это исправить, поместите новый процессор в начало конвейера httpRequestBegin.

public class MvcFixHttpProcessor : Sitecore.Pipelines.HttpRequest.HttpRequestProcessor
{
    public override void Process(Sitecore.Pipelines.HttpRequest.HttpRequestArgs args)
    {
        //when using a path such as /Controller.aspx/Blahblahblah, Sitecore's parsing of FilePath can break if Blahblahblah is too long
        RouteData routeData = RouteTable.Routes.GetRouteData(new HttpContextWrapper(args.Context));
        if (routeData != null)
        {
            args.Url.FilePath = args.Context.Request.Url.LocalPath;
        }
    }
}

(Изменить 13.09.2011: мне не приходилось использовать указанное выше исправление в течение некоторого времени.)

2) Скажите Sitecore игнорировать URL-адреса, которые направляются на ASP.NET MVC

Для этого поместите новый процессор в конвейер httpRequestBegin после ItemResolver.

public class SystemWebRoutingResolver : Sitecore.Pipelines.HttpRequest.HttpRequestProcessor
{
    public override void Process(Sitecore.Pipelines.HttpRequest.HttpRequestArgs args)
    {
        RouteData routeData = RouteTable.Routes.GetRouteData(new HttpContextWrapper(args.Context));
        if (routeData != null)
        {
            args.AbortPipeline();
        }
    }
}

Если вы используете языки в своих URL-адресах Sitecore, вам нужно будет добавить некоторую настраиваемую логику, сочетающую генерацию ссылок Sitecore с генерацией MVC ActionLink, чтобы обеспечить добавление языка в начало вашего URL-адреса MVC. Однако с указанными выше конвейерными модификациями добавление языка в URL не должно иметь побочных эффектов при маршрутизации MVC (поскольку Sitecore переписывает URL после прочтения языка).

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

(Редактировать 13.09.2011: Генератор пользовательских элементов отлично подходит для этого. http://blog.velir.com/index.php/2010/10/19/custom-item-generator/)

Удачи.

8 голосов
/ 21 августа 2009

Я думаю, что реальный вопрос, который вы должны здесь задать, это; если у вас уже есть Sitecore - зачем вам нужны накладные расходы и сложности при внедрении MVC?

Есть ли у вас какие-либо бизнес-требования вне основного веб-сайта, которые потребовали бы MVC?

6 голосов
/ 01 апреля 2010

Я второй комментарий Марка о требованиях. Стоит ли рисковать? Скорее всего, вы потеряете следующие функции Sitecore, если решите не использовать встроенные функции визуализации:

  1. OMS
  2. Веб-формы для маркетологов
  3. Условный рендеринг
  4. Редактор страниц
  5. Дизайнер страниц

может быть, даже больше.

4 голосов
/ 21 августа 2009

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

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

3 голосов
/ 23 марта 2012

Они, конечно, могут быть смешаны, и я уверен, что вижу ценность этого :) Никакой нативный функционал не теряется при использовании метода, который я описал в своем блоге: http://www.chrisvandesteeg.nl/2012/02/26/sitecore-mvc/

1 голос
/ 12 октября 2009

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

Что касается Sitecore, то здесь есть кривая обучения, но, честно говоря, в моем случае, поскольку я фактически изучил ASP.NET MVC «первым», а не веб-формами, кривая обучения также была слегка приписана некоторым моя неопытность с веб-формами. Тем не менее, по-прежнему существует определенная кривая обучения, связанная с Sitecore, но есть много учебных и справочных материалов, которые можно найти в этом. Кроме того, веб-элементы управления, которые поставляются с Sitecore, значительно упрощают создание простого приложения для веб-форм. Кроме того, есть возможность использовать XSLT в качестве движка рендеринга, что также удобно.

Если это всего лишь один проект, о котором вы думаете, я бы сказал, что просто придерживайтесь Sitecore, поскольку его система презентаций достаточно хорошо продумана. И, как сказал Марк выше, это действительно немного усложнит мне, и я также не уверен, что от этого даже выиграет. Кроме того, в соответствии с мнением оребрения73, при создании материалов в Sitecore серьезно ощущается, что вы уже используете MVC, просто используете другую среду.

0 голосов
/ 16 июня 2016

Сейчас есть проект Хабитат.

Sitecore Habitat - это проект Sitecore, который использует модульную архитектуру. На своем веб-сайте они представляют полностью рабочий пример для установки и тестирования.

Проект среды обитания:

https://github.com/Sitecore/Habitat

0 голосов
/ 26 июня 2015

Я знаю, что этот пост довольно старый, но я все равно высказал бы свое мнение о Sitecore MVC. Я начал работать над проектом несколько месяцев назад, используя исключительно Sitecore MVC. Есть много ограничений на то, с чем я работаю, так как этот проект должен работать с или без CMS и быть в состоянии соответствовать как можно большему количеству CMS (в настоящее время мы используем 2).

ASP.NET MVC не стал для нас легкой задачей. Это 2015 год, и мы должны идти вперед с новыми технологиями. Мы используем Sitecore 8, и я думаю, что Sitecore MVC стал зрелым с Sitecore 7.

Хотя на дороге еще есть несколько неровностей. Если вы планируете использовать Sitecore с постами в форме, убедитесь, что они сделаны с использованием AJAX. Проверка правильности поля может быть сложной, если вы используете обычные действия POST, но есть обходные пути.

0 голосов
/ 23 января 2011

MVC в Sitecore имеет потенциал, но я думаю, что он еще не готов к производству. Как вы обнаружили при создании этой статьи в блоге, вы освещаете неизвестную область.

...