Что подразумевается под «инъекцией зависимостей»? Любой пример кода AS3, чтобы показать? - PullRequest
2 голосов
/ 31 декабря 2011

Я часто получаю термин «Внедрение зависимостей» в книгу AS3, которую я читаю.Однако это не объяснило, что именно.Может кто-нибудь показать, что именно он использует некоторые строки кода AS3.0?

Спасибо, Вишвас

1 Ответ

8 голосов
/ 31 декабря 2011

Внедрение зависимости просто означает, что вместо того, чтобы класс, решающий, какие объекты ему нужны для работы, он получает эти объекты извне.

При нормальной разработке наши объекты определяют свои классы конкретно, как это:

public class MyClass
{
    private var m_someObj:SomeObj = null;

    public function MyClass()
    {
        this.m_someObj = new SomeObj;
    }
}

Переходя к инъекции зависимостей, MyClass теперь получает свои зависимости от внешнего:

public class MyClass
{
    private var m_someObj:SomeObj = null;

    public function MyClass( obj:SomeObj ):void
    {
        this.m_someObj = obj;
    }
}

var myClass:MyClass = new MyClass( new SomeObj );

В этом примере мы передаем класс SomeObj при построении MyClass. Вы также можете использовать публичные переменные / свойства либо. Передача объектов через конструктор полезна для жизненно важных зависимостей.

Теперь, чтобы сделать это действительно полезным, мы можем использовать интерфейсы вместо конкретных классов. Это позволяет нам легко изменить поведение MyClass:

public interface ISomeObj
{
}

public class SomeObjImplA implements ISomeObj
{
}

public class SomeObjImplB implements ISomeObj
{
}

public class MyClass
{
    private var m_someObj:ISomeObj = null;

    public function MyClass( obj:ISomeObj ):void
    {
        this.m_someObj = obj;
    }
}

var myClass1:MyClass = new MyClass( new SomeObjImplA );
var myClass2:MyClass = new MyClass( new SomeObjImplB );

Чтобы привести пример, интерфейс ISomeObj может описывать рендерер. Класс SomeObjImplA будет отображаться с использованием обычных методов addChild(), а класс SomeObjImplB - с использованием блитинга. Теперь вы можете изменить способ визуализации объекта MyClass, просто изменив параметр - классу MyClass не нужно знать, отображается ли он нормально или с помощью блиттинга.

Объект, который решает, какой класс передать MyClass, называется инжектором . Как он решает, какой класс вводить, где вы получаете гибкость. Например, вы можете загрузить объект XML, который содержит классы для внедрения, или использовать отражение, как я думаю. Robotlegs работает.

Ссылка, которую разместила 32bitkid, является довольно хорошим объяснением принципа, но в этом суть. Вы также можете проверить вики-страницу . Для получения бонусных очков читайте о Inversion of Control , что несколько связано.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...