Делает MVC Contrib, выполняют его обещание повышения производительности в ASP.NET MVC

COM является механизмом, который позволяет повторное использование объектов (или скорее компоненты), независимо от языков, используемых программистом, который реализовал компонент и программиста, который использует его, и независимо от того, был ли компонент реализован в программе клиента или в другом месте на машине (или сеть).

Вообще говоря, каждый COM-компонент обеспечивает реализацию одного или нескольких интерфейсов. Те интерфейсы определяются нейтральным в отношении языка способом с помощью Язык определения интерфейсов (IDL) . Как пример, один из фундаментальных интерфейсов в COM, IUnknown, определяется как это:

interface IUnknown
{
   virtual HRESULT QueryInterface(REFIID riid, void **ppvObject) = 0;
   virtual ULONG AddRef(void) = 0;
   virtual ULONG Release(void) = 0;
};

Этот небольшой интерфейс фундаментален в COM, потому что каждый COM-компонент должен реализация это. Это определяет два важных аспекта оборудования COM:

  • QueryInterface позволяет коду вызова получать реализацию для известного интерфейса. В COM на интерфейсы ссылаются GUID (также известный как Интерфейсные Идентификаторы, IID). Если объект реализует несколько интерфейсов, это - то, как клиентский код получает ссылку на каждый из тех интерфейсов. Это действует как своего рода оператор кастинга, если Вы будете.
  • AddRef() и Release() реализуют механизм управления памятью для COM-объектов. Как их имя предполагает, наиболее распространенная модель является механизмом подсчета ссылок, где экземпляр уничтожается после того, как последний клиент выпустил его ссылку на него.

Все COM-компоненты регистрируются в системе на установку. Если программист хочет использовать определенный компонент, он должен:

  • Удостоверяются, что компонент установлен в достижимом местоположении. Большую часть времени это находится в системе запущенного приложения, но COM + также позволяет компонентам существовать на удаленных компьютерах.
  • Знают GUID данного компонента. С этим GUID клиент может тогда попросить, чтобы система инстанцировала компонента (в C, функция, чтобы сделать, это называют CoCreateInstance()). Можно посмотреть в реестре под HKEY_CLASSES_ROOT\CLSID: каждый GUID там является (по всей вероятности) идентификатором для COM-компонента или интерфейса, и записи ниже того ключа говорят систему, как это должен быть instanciated.

оборудование COM чрезвычайно сложно. Например, реализация или использование COM-компонентов в C требуют ужасающего объема работы, но высокоуровневые языки как Visual Basic сделали много для упрощения реализации и использования COM-компонентов. Преимущества однако очень реальны. Это позволяет записать приложение в, скажем, Visual Basic, но все еще реализовать критические по отношению к производительности алгоритмы в C или C++ как COM-объекты, которые могут использоваться непосредственно от кода VB. Система заботится о [1 121] маршалинг аргументы вызова метода, передавая их через потоки, процессы и сетевые соединения по мере необходимости так, чтобы клиентский код имел впечатление от использования обычного объекта.

Много фундаментальных частей Windows основаны на COM. Windows Explorer (файловый менеджер), например, является в основном пустой оболочкой. Это определяет набор COM-интерфейсов для навигации и отображения древовидных иерархий и всего кода, который на самом деле отображает "Мой Компьютер", диски, папки и файлы как ряд COM-компонентов, которые реализуют те интерфейсы.

С появлением.NET, COM медленно становится устаревшим.

10
задан ahsteele 17 September 2009 в 16:00
поделиться

1 ответ

Я считаю, что MVC Contrib бесценен, когда дело доходит до тестирования. Они предоставляют множество методов расширения, которые позволяют вам быстро тестировать маршрутизацию и результаты действий. Например:

"~ / Администрирование / Пользователи / Изменить / testuser" .ShouldMapTo (a => a.Modify ("testuser"));

... для маршрутизации и для результатов действий:

Controller.List () .AssertViewRendered () .WithViewData> () .Count .ShouldEqual (4, «Должно быть возвращено 4 пользователя»);

Также MVC Contrib предоставляет полезный класс TestControllerBuilder, который может создать контроллер и позаботиться о подделке всего необходимого типа контекста HTTP. Кажется, это не так уж много, но в сочетании с DI, если больно, напиши это самостоятельно.

  Builder = new TestControllerBuilder ();
 Builder.CreateController  ();

Переходя от тестирования, фабрики контроллеров для DI / IoC действительно полезны, поэтому вам не нужно писать их самостоятельно, но это не обязательно, ИМХО.

Еще одна вещь, которая мне нравится в MVC Contrib, - это беглые помощники HTML . Я думаю, что намного лучше задавать свойства HTML и другие данные с помощью таких беглых помощников - вот два примера:

<% = this.TextBox ("name"). Label ("Activity Category Name:") .MaxLength (50) .Class ("required")

10
ответ дан 4 December 2019 в 01:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: