Написание пользовательского поставщика Hive с использованием объектов в качестве источника данных

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

Объект может выглядеть примерно так

public class MyContent
{
    public System.Collections.Generic.List Content { get; set; }
}

public class ContentExample
{
    public string Title { get; set; }
    public string Text { get; set; }
}

public class MyFiles
{
    public System.Collections.Generic.List Files { get; set; }
}

public class FileExample
{
    public System.IO.FileInfo File { get; set; }
}

Я загрузил и проверил двух поставщиков Hive из галереи Visual Studio (Umbraco 5 Hive Provider и Umbraco 5 Simple Hive Provider), но отсутствие документации немного беспокоит. Я также загрузил несколько других кустов-примеров, таких как поставщик кустов Wordpress, но он сильно отличается от тех, что есть в галерее Visual Studio.

Идея

Я привык работать с такими вещами, как ObjectDataSource, при необходимости приведенный выше пример можно дополнить полным CRUD.

Теперь я предполагаю, что один провайдер Hive сможет обслуживать разные части Umbraco контентом (правильно?). Просто настроить новый репозиторий и идти? Теперь я знаю, как соединить все части или даже как получить данные в провайдере.

Любая помощь в том, как я могу собрать все части вместе?

Спасибо


person Eric Herlitz    schedule 15.06.2012    source источник


Ответы (1)


Первый шаг — сделать шаг назад и оценить требования вашего бизнеса. Разрешите ли вы пользователям обновлять информацию с помощью форм во внешнем интерфейсе? Вам нужен древовидный редактор контента в бэк-офисе? Вам нужно работать с данными вне встроенного ORM?

Если ответ на этот вопрос отрицательный, поставщик улья — это излишество. Оценивайте решения с помощью простых контроллеров поверхности или просто пользовательского типа документа. . Umbraco 5 — это полноценная система EAV/CR, поэтому, в отличие от некоторых продуктов CMS, вы сможете представить любую структуру rdbs, которую только можете себе представить.

ContentExample может быть представлен как тип документа под названием «Статья», который имеет свойства «Заголовок» и «Текст». Просто определив этот тип документа, мы мгновенно получаем формы добавления и редактирования для наших пользователей бэк-офиса в нашем разделе контента. Мы даже можем ограничить, какие узлы могут иметь дочерние элементы типа «Статья», например, Новости.

Точно так же элемент управления загрузкой — это тип поля, который позволяет вам прикреплять файлы к вашему документу.

Итак, какой смысл в пользовательском поставщике ульев?

Цель пользовательского поставщика кустов — унифицировать действия CRUD для уровней доступа к данным. В результате данные могут храниться во встроенной форме nhibernate, настраиваемых таблицах, RSS-каналах или даже в плоских файлах, при этом для их извлечения и обновления используется общий интерфейс. Если это похоже на то, к чему вы стремитесь, читайте дальше.

Возвращаясь к бизнес-требованиям, в частности, где вы хотите фактически хранить данные? Учитывая, что у вас есть некоторые поля и свойства, связанные с хранением неструктурированных файлов, скажем, что один TypedEntity (модель ) эквивалентен одному файлу и напишите некоторый псевдокод:

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

    protected override void PerformAddOrUpdate(TypedEntity entity)
    {
        // step 1: serialize the typed entity to xml
        // step 2: write the file to the hdd, making sure that the file name is named using the                 hive id so that we can pull it back later.
    }

После того, как вы написали уровень доступа к данным, или DAL, вы можете подключить его в конфигурации куста, указав соответствующий URL-адрес. например вместо того, чтобы совпадать с содержимым:\\, ваше может совпадать в файловом менеджере:\\

Мы можем разрешить пользователям нашего бэк-офиса добавлять новые объекты (косвенно, новые файлы), написав собственное дерево, и мы можем отображать результаты нашим внешним пользователям с помощью макросов.

person seraphym    schedule 18.06.2012