Является ли MEF Microsoft версией Lua? - PullRequest
2 голосов
/ 28 ноября 2008

Я вижу параллели между MEF и Lua. Оба позволяют регистрировать методы и развертывать их по мере необходимости. Являются ли MEF и Lua формами IoC / Dependency Injection?

Ответы [ 2 ]

8 голосов
/ 30 ноября 2008

Полагаю, вы знаете об огромных различиях между этими технологиями и сосредоточитесь на вопросе:

"Являются ли MEF и Lua формами IoC / Инъекция зависимостей? "

Кроме того, я предполагаю, что вы говорите о встроенном Lua против Lua как языка.

Во-первых, давайте отделим внедрение зависимостей от инверсии управления. Фаулер определил инъекцию зависимостей как особую форму IoC , потому что идея IoC стала настолько распространенной, что она больше не была отличительной характеристикой системы. Его определение включает в себя три основных типа внедрения зависимостей: инъекция конструктора, инъекция сеттера и инъекция интерфейса. Во всех трех типах идея заключается в том, чтобы внедрить конкретную реализацию класса или интерфейса в класс или метод, который в этом нуждается. Это довольно удобно, потому что позволяет отделить зависимость и класс, который ее использует. Пока они следуют контракту, вы можете редактировать и обменивать реализации зависимости, не заботясь о ее потребителях и не оказывая на них влияния.

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

IoC шире. ( Фаулер , Википедия ) Общая тема заключается в том, что основной поток программы временно отказывается от управления, но получает обновления состояния потока от компонентов, выполняющих работу. Распространенные способы сделать это включают в себя: события, замыкания и продолжения.

Используя это определение, MEF легко проходит (управление передается неизвестным компонентам во время выполнения), и вы также можете сделать аргумент для встроенного Lua. Основная программа движется вперед, пока ей не понадобится функция, определенная во внешнем скрипте. В этот момент управление доставляется сценарию до тех пор, пока оно не будет выполнено или не прервано.

Следует отметить, что Луа не особенно особенный в этом отношении. Вы можете встраивать Perl, Python, Tcl и Ruby. На самом деле, общее определение IoC не особенно полезно в современной среде программирования. Это слишком часто. Фаулер говорит, что именно поэтому он ввел Dependency Injection как особый случай. В мире графических интерфейсов, событий, потоков, демонов, замыканий, продолжений и монад все использует IoC. Сегодня, когда люди говорят «IoC», они часто имеют в виду своего рода инъекцию зависимости.

5 голосов
/ 28 ноября 2008

MEF не имеет ничего общего с Луа и не похож на Луа.

MEF - это фреймворк для расширения (в основном, это фреймворк для плагинов).

Lua - очень классный скриптовый язык.

«Оба позволяют вам регистрировать методы и развертывать их по мере необходимости». Это предложение относится к C, C ++, C #, VB, SQL, DI Frameworks, JavaScript, General Motors, Ford, больниц ...

...