content management framework

OpenKit.Net

Войти
Пользователю Разработчику Характеристики За и против Downloads Контакты

Определение


 OpenKit.Net  – это CMS/CMF, созданный на C#, .Net Framework 2.0. OpenKit.Net представляет собой web-оболочку (cms), которая позволяет организовать экраны модулей (автономных, раздельно компилируемых, затемненных), в страницы одного или нескольких web-сайтов. Оболочка никак не связана с назначением этих модулей, ничего не знает об их функциональности и работает с ними через единый, открытый для сторонних разработчиков, API (cmf). Это обеспечивает универсальность, широту сфер применения, OpenKit.Net при общей структурной простоте системы.


Отличие от паттернов ASP. NET WebForms ( WF) и ASP. NET (MVC)


WebForm представляет собой один из спосбов построение графического интерфейса (UI - user interface), а MVC - вариант  его отделения от логики приложения ( BL –business level). Но отделение UI от логики является лишь одним из срезов приложения. Другой, поперечный ему срез, - это декомпозиция приложения на слабосвязанные модули. Этот срез может быть полностью проигнорирован в случае простых приложений, но по мере усложнения прикладной объектной модели он приобретает все большую важность, пока не становится первостепенным. Паттерны WebForm и MVC к декомпозиции приложения на модули прямого отношения не имеют, поэтому, чем больше функциональных блоков в приложении, тем более затруднена его дальнейшая разработка и сопровождение. 

Для OpenKit наоборот: приложение – это, прежде всего, набор модулей. А как внутри модуля UI отделен от BL – дело второе, По усмотрению разработчика они могут быть смешаны в лапшу, а могут быть структурированы. Главное – это изначальное обеспечение модульности. В этом принципиальное отличие паттерна OpenKit от паттернов WebForm и MVC.


Преимущество 


Чтобы объяснить, в чем именно заключается преимущество CMF OpenKit.Net, рассмотрим наиболее распространенный подход к созданию сайтов (приложений).

Часто сайты проектируют исходя из графического интерфейса, когда логика его работы диктует структуру и логику приложения. Это оправдано, если сайт имеет жестко заданную специализацию, и заранее известно, что в будущем она принципиально меняться не будет. Такие приложения строятся быстро, стоимость их программной части в среднем невелика и основные затраты разработки уходят на графический дизайн. Именно поэтому такой подход наиболее популярен.

Но этот подход имеет и обратную сторону. Графический интерфейс для любого приложения есть внешний, и наиболее изменчивый слой. Здесь же именно он определяет все взаимосвязи внутри системы, а это значит, что даже отделение интерфейса от других, внутренних, слоев приложения. исключительно формально и не дает никаких преимуществ. Число взаимосвязей внутри такой системы всегда будет максимальным, и при ее развитии их число будет расти в геометрической прогрессии. При наращивании функций, такую систему, в один прекрасный момент, будет невозможно изменить ни за какую цену, поскольку ее сложность устремится в бесконечность. 

Преимущество фреймворка OpenKit.Net в том, что он изначально не допускает появления таких проблем. Любое приложение здесь изначально создается как автономный, отдельно компилируемый модуль в виде dll файла. Этим стимулируется  разработка от наиболее стабильной основы: от структуры прикладной области. Количество взаимосвязей между автономными единицами всегда минимально, а потому, сложность системы всегда будет находиться под контролем. Внесение каждого нового изменения не затрагивает (или мало затрагивает) другие части системы. За счет этого повышается надежность, а стоимость любого изменения остается минимальной на протяжении всей жизни приложения.


Мотивация 


«Даже самое искусное сопровождение программы только отдаляет момент повержения ее в состояние неисправимого хаоса, выходом из которого является повторное проектирование с самого начала»
Фредерик Брукс, «Мифический человеко-месяц», 2-е издание, СПб, 2000, Стр.225

«Поддержка изменений является основной целью объектной технологии»


Бертран Мейер, «Объектно-ориентированное конструирование программных систем», М. 2005, стр. 6

Одним из центральных понятий объектной технологии является модульность. Но оба паттерна ASP.NET не специализируются на поддержке модульности прикладных приложений. Они предназначены только для частного аспекта – для отделения графического интерфейса от прикладной логики. Этот недостаток пытаются компенсировать изощренностью инструментов RAD (Visual Studio), но это не решение проблемы. Как следствие, разработка приложений с большим числом слабо связанных модулей оказывается затруднительной.


Паттерн OpenKit. Net


В противовес паттернам ASP. NET, ОК создавался как паттерн для создания, прежде всего, модульных приложений. Фреймворк имеет следующую структуру:

  1. Оболочка (CMS) объединяет физические модули приложения (сборки), слабо связанные или полностью автономные.
  2. Сборка содержит связанные по смыслу логические модули (экраны или их группы)
  3. Экран представляет пользователю фрагмент прикладной логики

Оболочка ничего не знает о модулях кроме общего программного интерфейса. Ее задача исключительно административная: организовать их в страницы web-сайта.

Композиционной единицей приложения (web-сайта) в OpenKit.Net является физический модуль (сборка) с высокой степенью автономности. Он состоит из одного или нескольких логических модулей, которые объединены в группу ( cluster). Автономный модуль несет не только прикладную объектную модель, но и экраны для управления этими объектами. Вследствие этого изменения в структуре данных и связанные с этим изменения в графических интерфейсах не требуют вмешательства в код разных программ и сборок, но производятся в пределах всего одной сборки, что в целом повышает надежность.

При этом вовсе не обязательно, чтобы пользовательский интерфейс (UI) физически находился в той же сборке, что и логика – при инсталляции модуля он может быть размещен в файловой системе.

Группа логических модулей в сборке

Рис.1. Группа логических модулей в сборке.

Логический модуль – это класс экрана ( screen, viewer), наследующий определенный интерфейс. В этом выражается суть разделения UI и BL: модули для пользователя и модули по API – это разные вещи (но могут совпадать), хотя в обоих случаях речь идет об одной и той же объектной модели. Поэтому для пользователя модуль представлен экраном (одним или группой), а сторонние программные компоненты могут взаимодействовать с любым открытым классом прикладной объектной модели или слоя служб.

Логический модуль– это полноценное приложение, которое может быть как монолитным, так и многоуровневым, а также распределенным. Его внутреннее расслоение остается на усмотрение разработчика. Каждый модуль сам отвечает за свою установку, создание объектов в базе (базах) данных, подготовку файловой системы и очистку ресурсов при удалении из оболочки ( CMS). Он может использовать объектные модели других модулей.

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

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

Экран - основной тип, с которым имеет дело разработчик. Он отвечает за вывод фрагмента итоговой HTML страницы и обработку AJAX запросов от этого фрагмента. Все, что относится к обработке HTTP запроса в WF или в MVC (акшены, рутеры и т.д.), в OpenKit. Net сводится всего к двум обработчикам экрана: Execute() и ExcuteAjaxCommand(). Соответствие между запросом и экраном определяется оболочкой – разработчику об этом думать не нужно.

Классу экрана соответствует HTML разметка по умолчанию – ее дизайн может быть настроен конечным пользователем. Экранов может быть много, как отдельно стоящих, так и находящихся в сложных взаимоотношениях. Разработчик может объединять экраны в группы и визарды, и таким образом создавать многостраничные модули.

Для отделения дизайна от данных, каждый экран может поддерживать заглушки данных и элементы управления, которые встроены в экран вместе с документацией по их использованию.

У экрана есть эквивалент элементов управления, но они проще, чем в ASP. NET: это XML подобные фрагменты с одинаковой для всех экранов структурой. В них можно класть что-угодно – валидации XML там нет. Такая разметка может содержать фрагменты HTML и настройки отображения контента. В момент сохранения шаблона она преобразуется в легкие структуры, которые затем при выполнении запроса десериализуются и передаются в методы экрана. Для каждого экрана разработчик создает свои элементы, но их может и не быть. Пользовательская документация по ним включается непосредственно в класс экрана. Для создания экрана достаточно HTML ,JavaScript (можно JQuery) и С#( VB). 

Между кодом и дизайном прямой зависимости нет. Дизайн состоит только из стандартного HTML, CSS и JavaScript. Дизайнер может не знать ничего другого, поэтому сторонняя разработка дизайна вполне реальна, Для соединения с сайтом, исходный HTML шаблон нужно только правильно разбить на фрагменты между шаблоном страницы и шаблонами модулей ( copy&paste ).

Степень разделения в классе экрана логики интерфейса и прикладной логики определяется самим разработчиком. В этом плюс: на начальном этапе проекта уровни могут быть смешаны (что естественно для начальной стадии) и четко разделены впоследствии, В OpenKit. Net это не опасно. Даже при наихудшем сценарии бардак за пределы физического модуля (сборки) не выйдет и приложение из многих блоков сохранит как устойчивость, так и функциональную масштабируемость.

Каждый экран может разрабатываться как на web сервере, так и в консоли. Для имитации HTTP запроса и контекста CMS в консоли есть специальная консольная оснастка.


Программный комплекс и паттерн OpenKit. Net


«Всегда желательно иметь простую и универсальную схему,
нежели множество частных случаев»
Бертран Мейер,
«Объектно-ориентированное конструирование программных систем», стр. 172

Универсальность платформы .Net дает возможность использовать модули OpenKit.Net не только на web-сайте, но и в настольных, консольных и распределенных приложениях. Таким образом можно достигать бесшовности программного комплекса и текучести, переносимости функционала из web в консоль, десктоп и обратно.

Под архитектурный шаблон автономного модуля могут быть разработаны разнотипные оболочки. Предлагаемая в рамках данного проекта web-оболочка (CMF) является лишь одним из возможных вариантов. Из разнотипных оболочек можно сформировать полноценную корпоративную систему небольшого предприятия:

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

Структурно, программный комплекс может состоять всего из двух частей:

  1. API модуля, общий для всех разнотипных (web, winForms, Console, Remoting Services и т.п.) приложений, разрабатываемых в компании.
  2. Одна графическая или программная оболочка для каждого типа приложений, которая посредством этого API организует работу с модулями.
Программный комплекс на базе паттерна OpenKit.Net

1. Архитектурный шаблон модулей

Модуль – это функциональная единица. Определение намеренно абстрактно для того, чтобы обеспечить архитектурную гибкость этой единице. Основой его, как правило, является объектная модель или какая-то ее часть, заключенная в сборке (в кластере). Каждый логический модуль в кластере может содержать много экранов, но он обязательно должен иметь один экран, запускаемый графической оболочкой по умолчанию. Такой экран должен быть один для фасада каждого типа. Графическая оболочка один экран-по-умолчанию трактует как один логический модуль. Соответственно, для нее количество модулей в кластере – это количество в нем экранов по умолчанию.

Точно также может быть фасад и экраны для winForms. Экраном в этом случае будет класс формы, который можно передавать с сервера в графическую оболочку на клиента по Remoting и там запускать. Идею реализации этого можно найти на сайте RSDN в статье «Использование Remoting в multitier приложениях». Также может быть создан и консольный фасад прикладной объектной модели, который может быть использован не только для непосредственной работы, но и для ее автоматических тестов.

Более детальное описание кластера и модуля находится в руководстве разработчика, а примеры исходного кода - в SDK. И то и другое находится здесь .

2. Графическая оболочка.

Главная задача оболочки – дать пользователю доступ к функционалу модулей. В оболочку как в мозаику, собираются предоставляемые ими экраны. Например, web-оболочка (CMF) организует работу с HTML экранами, а winForms оболочка – с формами. Добавление/удаление кластеров из оболочки производится тремя кнопками «Добавить», «Удалить», «Обновить». Никакие изменения в модулях оболочку в принципе затрагивать не должны.


Такая архитектура решает сразу три вопроса: корпоративного интерфейса, единой аутентификации и развертывания. Соответственно, все эти вопросы снимаются с прикладных модулей (приложений), тем самым, существенно упрощая их.

Что касается развертывания, то в случае winForms на клиентские машины достаточно поставить только оболочку, а вся прикладная начинка, включая GUI модулей, будет находиться на сервере. Таким образом, даже развертывание и сопровождение приложений winForms ничем не будет отличаться от web-приложений, требуя внесения изменения только в одном месте (на сервере), что упрощает (удешевляет) администрирование системы.

Но самое главное заключается в том, что данный архитектурный шаблон обеспечивается бесшовность программного комплекса. Стирается принципиальная разница между web-сайтом, отдельным настольным приложением и комплексным решением предприятия, поскольку в основе их всех лежат одни и те же модули. Именно поэтому можно начать с сайта-визитки и постепенно превратить его в информационную систему целого предприятия, расширяя конфигурацию, но при этом, не меняя архитектуру системы!

В итоге имеем вместо кучи разрозненных приложений написанных неизвестно как и неизвестно на чем – десятки модулей, возможно даже разнотипных, но с одинаковой архитектурой, написанных на одном языке (не считая HTML и JavaScript), по одному стандарту и объединенных в одной - двух графических оболочках. Стоимость сопровождения стремится к минимальной, корпоративная информационная система в целом упрощается и, следовательно, становится более надежной и дешевой в сопровождении.

Для небольшой компании это решение может стать недорогой альтернативой ERP и тому подобным системам. Ее разработчики могут своими силами создавать только ту функциональность, которая реально востребована на данном предприятии, не переплачивая за избыточную функциональность и недостаточную гибкость покупных решений с одной стороны и избегая «лоскутной автоматизации» из кучи разношерстных программ с другой.

В зависимости от требований компании можно обойтись и одной графической оболочкой: winForms или web. Вариантом web-оболочки и является OpenKit.Net, полноценная CMS/CMF.


Copyright © 2009-2010 OpenKit.Net All rights reserved