Component Business Model (CBM) — техника, развитая IBM, чтобы смоделировать и проанализировать предприятие. Это — логическое представление или карта бизнес-компонентов или «стандартных блоков» и может быть изображено на единственной странице. Это может использоваться, чтобы проанализировать выравнивание стратегии предприятия с возможностями организации, и инвестиции, чтобы определить избыточные или накладывающиеся деловые возможности, проанализировать возможности сорсинга для различных компонентов (купите или постройте), располагая по приоритетам варианты преобразования, и может использоваться, чтобы создать объединенную дорожную карту после слияний или приобретений.
Модель организована как бизнес-компоненты вдоль колонок и «эксплуатационных уровней» вдоль рядов. Бизнес-компоненты определены частично как большие сферы бизнеса с характерными навыками, возможностями IT и процессом. Три эксплуатационных уровня «Прямые», «Контроль» и «Выполняют» — они отделяют стратегические (Прямые) решения, управленческие проверки (Контроль), и деловые действия (Выполняют) на деловых компетенциях.
Критика
С развитием компетентности развития компонентов «Логика» и «стоимость» стали словами в литературе по бизнес-моделям. Однако, за прошлые годы, подходы Бизнес-модели развили и включают сегодня дизайн бизнес-модели, инновации бизнес-модели и преобразование бизнес-модели. Даже при том, что подход бизнес-модели IBM хорош для отображения компонентов бизнес-модели или продукта, следующие критические замечания были определены. Составляющий подход Бизнес-модели IBM:
- Основан на компонентах, которые, как предполагается, состоят из людей, процессов и технологии, необходимой этому компоненту, чтобы действовать как автономное предприятие. Как подвергшийся критике законно ‘технологический’ элемент в каждом блоке — определенно дань основному бизнесу IBM, в то время как это не обязательная часть многих бизнес-моделей в действительности. Это — стратегия, которая жизненно важна в пределах бизнес-модели, не технологии.
- Термин ‘процесс’ в рамках составляющего описания IBM, также законно подвергся критике, требует дополнительных объяснений, потому что у этого есть двойное значение в Бизнесе и единственное значение в IT; какой предназначался здесь? И почему каждый бизнес-компонент должен действовать как «автономное предприятие» вместо того, чтобы быть составами бизнес-компонентов также (т.е. он не может действовать, стоя один)?
- Не включает Корпоративную структуру https://ru.knowledgr.com/07433067/ModelloDiBusinessComponente» target=»_blank»]ru.knowledgr.com[/mask_link]
Компонентная модель бизнеса
КМБ, CBM, Component Business Model™ – методика, используемая для представления деятельности компании в виде набора отдельных бизнес-компонент, распределенных по компетенциям бизнеса и уровням управления (ответственности), для анализа и идентификации возможностей улучшения и инновации. Методика компонентного бизнес-моделирования разработана компанией IBM и успешно используется ею для собственных проектов. Вместе с тем, созданный IBM инструмент для отображения бизнеса компаний оказался очень удобным, и его применение сейчас выходит за рамки проектов в области ИТ в силу своей универсальности, удобства, наглядности.
Консалтинг
- Компетенции
- Реализованные проекты
- Клиенты и партнеры
- Рекомендации и отзывы
Бизнес-обучение
- Программы обучения
- Рекомендации и отзывы
- Словарь бизнес-терминов
- Обзоры бизнес-литературы
- Записаться на Обучение в группе
- Записаться на Индивидуальное обучение
Источник: www.semenyutin.ru
[ELMA3] Компонентная модель
Для инициализации и работы с ядром системы существует менеджер компонентов – класс EleWise.ELMA.ComponentModel.ComponentManager . Он позволяет инициализировать компонентную модель, регистрировать и получать компоненты. При запуске системы менеджер компонентов загружает сборки, помеченные атрибутом EleWise.ELMA.ComponentModel.ComponentAssemblyAttribute и обрабатывает их на наличие компонентов.
Основные классы для работы с компонентной моделью расположены в сборке EleWise.ELMA.SDK в пространстве имен EleWise.ELMA.ComponentModel .
Типы, используемые в компонентной модели
- • ExtensionPointAttribute – атрибут для объявления интерфейса-расширения;
• ComponentManager – менеджер доступа к загруженным компонентам;
• ComponentAssemblyAttribute – атрибут для объявления сборки, содержащей компоненты;
• ComponentAttribute – атрибут для объявления компонента;
• IInitHandle r – точка расширения для обработки загрузки компонентов.
Создание точки расширения
Для создания точки расширения необходимо создать интерфейс и пометить его атрибутом EleWise.ELMA.ComponentModel.ExtensionPointAttribute .
namespace EleWise.ELMA.ComponentModel < /// /// Атрибут интерфейса точки расширения /// [AttributeUsage(AttributeTargets.Interface)] public class ExtensionPointAttribute : Attribute < /// /// Точка расширения с типом жизненного цикла Application и регистрацией экземпляров компонентов /// public ExtensionPointAttribute(); /// /// Точка расширения с указанным типом регистрации компонентов (регистрация типов компонентов, либо экземпляров компонента) /// /// Если false, то регистрируются только типы компонентов, реализующих данную точку расширения public ExtensionPointAttribute(bool createInstance); /// /// Точка расширения с указанным типом жизненного цикла /// /// Тип жизненного цикла компонентов, реализующих данную точку расширения public ExtensionPointAttribute(ServiceScope serviceScope); /// /// Создавать ли экземпляры компонентов /// /// /// True, если нужно создать экземпляры (после загрузки они доступны через метод IComponentManager.GetExtensionPoints). /// False, если нужно загружать только их типы (после загрузки они доступны через метод IComponentManager.GetExtensionPointTypes). /// public bool CreateInstance < get; >/// /// Контекст, в котором будут зарегистрированы и созданы компоненты, реализующие точку расширения /// Applcation — регистрация на уровне приложения (до инициализации IInitHandler.Init), один экземпляр на приложение /// Shell — регистрация уровне контейнера (контейнер пересоздается после включения/отключения расширений), один экземпляр на контейнер /// Transient — регистрация уровне контейнера, экземпляр создается на пождому запросу из контейнера /// UnitOfWork — регистрация уровне контейнера, экземпляр создается на каждый UnitOfWork (в Web сонтексте на каждый HTTP запрос) /// public ServiceScope ServiceScope < get; >> >
/// /// Точка расширения для меню /// [ExtensionPoint] public interface IMenuExtension < /// /// Получить список пунктов меню. /// MenuItem[] GetMenuItems(); >Создание компонента
Для создания компонента нужно проверить наличие у сборки, в которой он создается, атрибута EleWise.ELMA.ComponentModel.ComponentAssemblyAttribute . Если его нет, нужно прописать.
[assembly: EleWise.ELMA.ComponentModel.ComponentAssembly]
Затем создать класс, реализовать интерфейс точки расширения и пометить атрибутом EleWise.ELMA.ComponentModel.ComponentAttribute .
namespace EleWise.ELMA.ComponentModel < /// /// Атрибут компонента, реализующего точки расширений /// [AttributeUsage(AttributeTargets.Class | AttributeTargets.Interface, AllowMultiple = false)] public class ComponentAttribute : Attribute < /// /// Порядок, в котором выстраивается список компонентов, реализующих определенную точку расширения /// [DefaultValue(0)] public int Order < get; set; >/// /// Автоматически инициализировать значения свойств (через контейнер Autofac) /// [DefaultValue(true)] public bool InjectProerties < get; set; >/// /// Применять перехватчики методов к классу /// [DefaultValue(false)] public bool EnableInterceptiors < get; set; >> >
/// /// Компонент, реализующий точку расширения IMenuExtension /// [Component] public class CustomMenuExtension : IMenuExtension < public MenuItem[] GetMenuItems() < . >>Менеджер компонентов
Менеджер компонентов создается при запуске системы и может быть получен после его создания через статическое свойство ComponentManager.Current .
namespace EleWise.ELMA.ComponentModel
< /// /// Менеджер компонентов /// public class ComponentManager : IComponentManager, IDisposable < /// /// Этап жизненного цикла /// public enum LifetimeStage < /// /// До начала инициализации /// BeforeInit, /// /// В момент вызова IInitHandler.Init /// Initializing, /// /// В момент вызова IInitHandler.InitComplete /// InitCompleting, /// /// После инициализации /// Initialized, /// /// Уничтожен /// Disposed > /// /// Получить текущий менеджер /// public static ComponentManager Current < get; >/// /// Инициализирован или нет /// public static bool Initialized < get; >/// /// Текущий контейнер IoC (доступен только в процессе начала инициализации — в методе IInitHandler.Init) /// public static ContainerBuilder Builder < get; >/// /// Этап жизненного цикла /// public LifetimeStage Stage < get; >/// /// Зарегистрировать существующий компонент. Метод доступен на этапах BeforeInit и Initializing. /// /// Компонент public ComponentManager RegisterComponent(object component); /// /// Зарегистрировать сборку, в которой будет искаться компоненты.Метод доступен на этапах BeforeInit и Initializing. /// /// Сборка public ComponentManager RegisterAssembly(Assembly assembly); /// /// Возвращает компонент определенного типа. Метод доступен на этапах Initializing, InitCompleting и Initialized. /// /// Тип расширения /// Экземпляр расширения public T GetExtensionPointByType(); /// /// Возвращает компонент, определенного типа.
Метод доступен на этапах Initializing, InitCompleting и Initialized. /// /// Тип расширения /// Экземпляр расширения public object GetExtensionPointByType(Type type); /// /// Возвращает компоненты, реализующие интерфейс-расширение. Метод доступен на этапах Initializing, InitCompleting и Initialized. /// /// Тип интерфейса расширения /// public IEnumerable GetExtensionPoints(); /// /// Возвращает компоненты, реализующие интерфейс-расширение.
Метод доступен на этапах Initializing, InitCompleting и Initialized. /// /// Тип интерфейса расширения /// public IEnumerable GetExtensionPoints(Type type); /// /// Возвращает типы компонентов, реализующих интерфейс-расширение. /// /// Тип интерфейса расширения /// Список типов компонентов. Если не найдены — возвращается пустой список.
public IEnumerable GetExtensionPointTypes(Type type); /// /// Возвращает типы компонентов, реализующих интерфейс-расширение. /// /// Тип интерфейса расширения /// Список компонентов public IEnumerable GetExtensionPointTypes(); /// /// Возвращает типы компонентов, реализующих интерфейс-расширение. /// /// Тип интерфейса расширения /// Список типов компонентов. Если не найдены — возвращается пустой список. public Type[] GetExtensionPointTypesArray(Type type); /// /// Получить типы, реализующие интерфейс IXsiType. /// /// public Type[] GetXsiTypes(); /// /// Получить массив всех компонентов, зарегистрированных в менеджере. Метод доступен на этапах Initializing, InitCompleting и Initialized. /// /// Массив компонентов. public object[] GetComponents(); > >
Процесс инициализации менеджера компонентов выглядит следующим образом:
- Загружаются все сборки (*.dll и *.exe), находящиеся в папке запускаемого приложения (веб-приложение или дизайнер ELMA).
- Выбираются сборки, имеющие атрибут ComponentAssemblyAttribute , а также добавленные через метод ComponentManager.RegisterAssembly .
- Из данных сборок выбираются классы, помеченные атрибутом ComponentAttributeилиServiceAttribute . Также выбираются объекты, добавленные через метод ComponentManager.RegisterComponent .
- В контейнере Autofac регистрируются классы выбранные на этапе 3:
- классы с атрибутом ComponentAttribute регистрируются с типом класса, а также типами реализуемых точек расширения;
- классы с атрибутом ServiceAttribute регистрируются с типом класс, а также всеми реализуемыми интерфейсами.
- Выбираются компоненты, реализующие точку расширения IInitHandler . Для каждого из них вызывается метод Init() .
- Обновляется контейнер Autofac компонентами, зарегистрированными на шаге 5.
- Выбираются компоненты, реализующие точку расширения IInitHandler. Для каждого из них вызывается метод InitComplete() .
- Инициализация завершена.
Точка расширения IInitHandler
Системная точка расширения EleWise.ELMA.ComponentModel.IInitHandler позволяет подписываться на события начала ( Init ) и окончания ( InitComplete ) инициализации менеджера компонентов.
namespace EleWise.ELMA.ComponentModel < /// /// Интерфейс компонента, поддерживающего методы инициализации /// [ExtensionPoint] public interface IInitHandler < /// /// Начало инициализации (могут использоваться свойства ComponentManager.Current и ComponentManager.Builder) /// void Init(); /// /// Завершение инициализации (доступен Locator) /// void InitComplete(); > >
В методе Init можно работать с текущим менеджером компонентов — статическим свойством ComponentManager.Current , а также построителем контейнера Autofac – статическим свойством ComponentManager.Builder (см. статью Архитектура ядра системы).
В методе InitComplete можно работать с текущим менеджером компонентов, а также локатором служб Locator (см. статью Архитектура ядра системы).
Получение компонентов
Для получения компонентов, реализующих определенную точку расширения (допустим, IMenuExtension), существуют 3 способа.
Способ 1. Автоматически инициализируемые свойства (Auto-injected)
Если объект, в котором требуется получить компоненты (допустим, MenuController), помещен в контейнер Autofac (см. статью Архитектура ядра системы), то необходимо объявить свойство.
public class MenuController : Controller < . public IEnumerableMenuExtensions < get; set; >. >
При создании объекта MenuController свойство MenuExtensions будет заполнено автоматически, если зарегистрирован хотя бы один компонент с реализацией точки расширения IMenuExtension. Если не зарегистрирован ни один, то в свойстве будет Null.
Способ 2. Использование менеджера компонентов (ComponentManager)
using EleWise.ELMA.Services; public class SomeClass < public void SomeMethod() < var menuExtensions = ComponentManager.Current.GetExtensionPoints(); if (menuExtensions != null) < . >> >
Способ 3. Использование локатора служб (Locator)
Описание класса Locator см. в статье Архитектура ядра системы
using EleWise.ELMA.Services; public class SomeClass < public void SomeMethod() < var menuExtensions = Locator.GetService>(); if (menuExtensions != null) < . >> >
Смотри также
- Список доступных точек расширения в системе: версии 3.13, 3.15, 4.0;
- Архитектура ядра системы.
Источник: www.elma-bpm.ru