Повторное использование Orchard's Core для создания другой среды расширения
Я очень хочу услышать мнения по этому поводу.
Мы строим расширяемую архитектуру для веб-приложений. У нас есть основная команда, которая создает продукт по умолчанию. Другие команды разработчиков используют продукт по умолчанию и хотят переопределить / заменить / расширить его функциональность на уровне кода.
Мы рассматриваем возможность использования ядра Orchard для достижения этой цели.
Если бы мы сделали это, вероятно, состояло бы из:
Удаление всего, что связано с CMS, из Orchard Извлечение базы данных Orchard Использование / сборка базовых DLL-библиотек Orchard для создания необходимых нам расширяемых возможностей. Одной альтернативой этому является ванильная расширяемость ASP.NET MVC.
Мнения?
3 ответа
Мы использовали аналогичный подход в ITV, мы решили, что хотим перейти на новую систему и хотим получить много функциональных возможностей, которыми обладает Orchard, но нам не нужно все это... то есть часть CMS.
Мы взяли Orchard.Web в качестве хоста для всех наших "областей / модулей" - это действительно важно, так как заставляет разработчиков задуматься о слабой связи их компонентов.
Затем мы решили взять основу и удалить некоторые ее аспекты. В рамках мы взяли Logging, Caching и DI, связанные с IDependency. Самая сложная часть была Autofac. Не торопитесь с этим, поскольку наша реализация, я думаю, была не лучшей, и я уверен, что в ней есть ошибки. Мы взяли много кода Orchard DI и попытались дооснастить его без всякой оболочки.
Orchard называется CMS, но это, безусловно, намного больше. Он очень универсален и дает вам много функций, не относящихся к CMS, из коробки. Например, его можно легко расширить с помощью модулей - это отлично подходит для создания каркасных приложений. Кроме того, Orchard не мешает вам использовать обычный ASP.NET MVC. Вы можете добавить обычные контроллеры и реализовать части своего приложения в vanilla MVC, если не можете найти то, что вам нужно в Orchard. Наконец, сама структура является очень расширяемой, и обычно можно переопределить каждый отдельный механизм в ней, если вам это нужно.
С другой стороны, с самого начала Orchard немного сложно выучить. Там не так много документации и много "магии" в рамках. Иногда сложно понять, как реализовать какую-то конкретную функциональность. По крайней мере, это мое впечатление. Однако сообщество очень полезно, и обычно вы можете найти людей, которые могут вам помочь. После того, как вы освоите Orchard, это отличная структура.
Так что в вашем случае, я думаю, стоит попробовать.
Другим, возможно, более экспериментальным подходом было бы использование Orchard Application Host.
Эта инфраструктура позволяет запускать облегченные оболочки Orchard внутри любого приложения, таким образом, по сути, вы можете писать код Orchard где угодно, будь то консольное приложение, облачный работник или даже веб-приложение, не относящееся к Orchard (хотя последнее будет немного бессмысленно).
Более того, Orchard App Host является примером именно того, чего вы хотите достичь: довести Orchard до его ядра и использовать его в качестве универсальной среды приложений. Это возможно довольно чистым способом (без изменений в Orchard), но довольно сложным. Без лучшего понимания вашего варианта использования, я сомневаюсь, что вы хотите развернуть нечто подобное.
В принципе, вы можете удалить каждый модуль из решения Orchard, даже модуль Core, если вы начнете заниматься приключениями и начнете строить оттуда: это, вероятно, самый простой способ. Однако, естественно, это также означает, что, как только вы попытаетесь использовать что-либо, не входящее в базовое ядро, вам придется заново реализовать то, что уже есть в Orchard.