Sitecore и ASP.net MVC
Мы начинаем новый проект с sitecore как наша CMS. Я думал использовать Sitecore как инструмент создания контента и использовать ASP.net MVC, как и на стороне доставки контента (CDA), вместе с Sitecore. Хотелось бы услышать ваши идеи и мысли об этом.
Кто-нибудь пробовал это?
Являются ли sitecore и MVC конкурирующие или дополняющие технологии?
Любые архитектурные идеи приветствуются.
Ответы
Ответ 1
В некоторых случаях может быть огромная польза для слияния двух. MVC не очень подходит для сайтов, ориентированных на контент. Тем не менее, веб-приложения со структурированным потоком и несколькими презентациями данных чрезвычайно полезны для него. Sitecore имеет несколько ограничения, когда речь идет о нескольких презентациях данных - вы можете определить только один набор деталей дизайна для элемента. Если у вас нет требований для редактирования WYSIWYG или простого предварительного просмотра одним кликом, вы можете использовать Sitecore в качестве хранилища данных и использовать некоторые из значений контекста, которые поступают из его конвейера (например, языка).
Для конвейера Sitecore HTTP необходимы две модификации:
1) Если вы используете расширение aspx в IIS6 для получения ASP.NET для обработки запросов MVC (например,/Controller.aspx/Action), исправьте синтаксический анализ Sitecore 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 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;
}
}
}
(Edit 9/13/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.
(Edit 9/13/2011: Пользовательский генератор элементов отлично работает для этого. http://blog.velir.com/index.php/2010/10/19/custom-item-generator/)
Желаем удачи.
Ответ 2
Я думаю, что настоящий вопрос, который вы должны задать здесь; если у вас уже есть Sitecore - зачем вам накладные расходы и сложность внедрения MVC?
Есть ли у вас какие-либо бизнес-требования за пределами основного веб-сайта, что потребует MVC?
Ответ 3
I second Отметьте комментарий о требованиях. Стоит ли рисковать? Скорее всего, вы потеряете следующие возможности Sitecore, если вы решите не использовать встроенные функции рендеринга:
- OMS
- Веб-формы для маркетологов
- Условный рендеринг
- Редактор страниц
- Дизайнер страниц
может быть даже больше.
Ответ 4
Я знаю, что разработчики Sitecore считают ASP.NET MVC, но я не знаю, пробовали ли они это. Я не могу думать о каких-либо проектах Sitecore, которые, я думаю, выиграли бы от ASP.NET MVC. Механизм динамического ответа Sitecore, конвейеры, обработчики, подстановочные знаки и другие функции, похоже, обеспечивают надмножество того, что вы можете выполнить с помощью MVC. Аналогичная история с основными страницами ASP.NET - вы можете использовать их с Sitecore, но подробности компоновки Sitecore превосходят.
Я не против ASP.NET MVC с Sitecore или без него, но Sitecore, похоже, предоставляет функции контроллера (на самом деле ASP.NET - это контроллер, а Sitecore просто подключается), ваша информационная архитектура - это модель, и ваши компоненты презентации - это виды.
Ответ 5
Они уверены, что могут быть смешаны, и я уверен, что вижу его значение:)
Никакая нативная функциональность не потеряна с помощью метода, который я описываю в своем сообщении в блоге:
http://www.chrisvandesteeg.nl/2012/02/26/sitecore-mvc/
Ответ 6
Как повезло, я сейчас работаю над двумя крупными проектами, использующими обе технологии соответственно. И хотя я большой поклонник обоих, я не вижу никаких преимуществ для слияния двух.
Что касается Sitecore, есть кривая обучения, но, честно говоря, в моем случае, поскольку я на самом деле изучил ASP.NET MVC "первым", а не Web Forms, кривая обучения также была слегка приписана некоторым из моя неопытность с веб-формами. Тем не менее, по-прежнему существует определенная кривая обучения, связанная с Sitecore, но есть много учебных и справочных материалов, плавающих вокруг, чтобы помочь с этим. Кроме того, веб-элементы управления, которые поставляются с Sitecore, заставляют его чувствовать себя намного меньше, как создание прямого приложения Web Forms. Кроме того, есть возможность использовать XSLT как механизм рендеринга, который также пригодится.
Если это всего лишь один проект, о котором вы думаете, я бы сказал, просто придерживайтесь Sitecore, поскольку система презентации хорошо продумана. И, как сказал Марк, это очень усложнит ситуацию, и я тоже не уверен, что от этого выиграть. Также, повторяя чувства коммодора73, строительный материал Sitecore всерьез чувствует, что вы уже используете MVC, просто используя другую структуру.
Ответ 7
MVC в Sitecore имеет потенциал, но я не готов к производству. Вы закрываете неизвестную землю, как я обнаружил при создании этой статьи в блоге.
Ответ 8
Я знаю, что этот пост довольно старый, но, хотя я бы сказал свое мнение о Sitecore MVC в любом случае. Я начал работать над проектом несколько месяцев назад, используя исключительно Sitecore MVC. Есть много ограничений на то, с чем я работаю, поскольку этот проект должен работать с CMS или без него и быть в состоянии вписаться в максимально возможное количество CMS (в настоящее время мы используем 2).
ASP.NET MVC для нас не было проблемой. Это 2015 год, и мы должны продолжить новые технологии. Мы используем Sitecore 8, и я думаю, что Sitecore MVC стал зрелым с Sitecore 7.
Однако на дороге все еще несколько ударов. Если вы планируете использовать Sitecore с сообщениями о форме, убедитесь, что они созданы с использованием AJAX. Выполнение проверки в поле может быть сложным, если вы используете регулярные действия POST, но есть обходные пути.
Ответ 9
Теперь есть проект Хабитат.
Sitecore Habitat - это проект Sitecore, который используется с использованием модульной архитектуры. На своем веб-сайте они представляют полностью рабочий пример для установки и тестирования.
Проект Хабитат:
https://github.com/Sitecore/Habitat