Внедрение зависимости без платформы

Тебе действительно нужно разделиться? Как насчет простой замены _ пробелом? например используя rindex и []=

a[a.rindex('_')] = ' '

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

РЕДАКТИРОВАТЬ: поскольку вопрос был отредактирован, теперь ясно, что ОП запрашивает список вместо строкового вывода

9
задан 20 February 2009 в 13:44
поделиться

6 ответов

Matlab-агностический ответ:

Если (Потребности B) и (B нуждается в C) затем Вы сначала создаете C, то создаете B и передаете C B. Затем Вы создаете A, и передача (B имеет C) к A.

Теперь, если C нужна зависимость, которая будет введена, звоните, он был бы, можно все еще сделать это после этой последовательности событий при помощи инжекции метода set. Это имело бы место, если зависимость является дополнительной для C. Иначе это вероятно дефект в Вашей инициализации программы, что C не был введен с D, прежде чем это было передано B.

Если Вы хотите использовать инжекцию конструктора для введения D в C после того, как Вы уже имеете ((B имеет C)), то необходимо будет использовать инжекцию метода set для передачи нового (C, имеет D) к B, но эта последовательность событий обычно является не действительным сценарием для DI.

5
ответ дан 4 December 2019 в 14:32
поделиться

Отказ от ответственности: Ответ агностика языка OO

Нет, Вы не должны передавать зависимости через целый граф объектов. Необходимость инстанцировать конкретных типов или передать их как параметры является точкой DI. Обычно у Вас будет некоторый другой объект, названный Ассемблером, например, который введет эти зависимости. Ассемблер может быть залогом рекламы, рукописным, или может быть некоторой платформой DI.

Например:

  • Класс ClsA имеет свойство интерфейса IB типа.
  • Класс ClsB реализует IB и имеет свойство интерфейсной ИС типа.
  • Класс ClsC реализует IC.

Ваш Ассемблер загрузит приложение и:

  1. создайте экземпляр, названный oC класса ClsC
  2. создайте экземпляр под названием Обь ClsB и введите его с oC
  3. создайте экземпляр, названный OA, и введите его с Обью

Все Ваши объекты области знают только интерфейсы. Assembler знает весь объект, но его цель состоит в том, чтобы только создать граф объектов и привести в движение все. Рукописный ассемблер является совершенно соответствующим; некоторые люди предпочитают писать код проводного соединения, чем использование файлов конфигурации. Не думайте, что это стоит проблемы, пишущий ассемблер (платформа DI), если Вы не планируете использовать его несколько раз. Дело в том, что Ваши классы записаны способом DI.

Смотрите на эту статью: http://books.google.com/books?id=vRxAnRb3mb4C&pg=PP1&dq=Danijel+Arsenovski#PPA428,M1

3
ответ дан 4 December 2019 в 14:32
поделиться

Если Вы делаете внедрение зависимости вручную, Вы более обеспечены не передающие зависимости через. Вы просто создаете C с его зависимостью, создаете B с C, создаете с B. Нет никакой потребности в для знания чего-либо о C или его зависимости. Это просто знает об интерфейсе B, и обычно зависимости не являются частью интерфейса для объекта.

2
ответ дан 4 December 2019 в 14:32
поделиться

Контейнер МОК самокрутки, где можно просто попросить зависимости, не будучи должен ввести их или использовать статический шаблон шлюза, чтобы заставить одиночный элемент создавать классы динамично с помощью фабрики.

Я нашел это видео действительно полезным введением к этим темам - http://www.dnrtv.com/default.aspx?showNum=126

2
ответ дан 4 December 2019 в 14:32
поделиться

Не знайте вещь о Matlab, но я принимаю (от Ваших слов), что существуют объекты. Если так, пойдите для Сервисного Локатора вместо Внедрения зависимости. Сервисные Локаторы очень просты реализовать, таким образом, никакие требуемые платформы.

0
ответ дан 4 December 2019 в 14:32
поделиться

Если я понимаю Ваш вопрос правильно, ответ может зависеть от того, как Вы создаете классы, от которых Вы инстанцируете объектов. В новейших версиях MATLAB классы могут быть определены двумя способами: класс "значения" или класс "дескриптора" (документация MATLAB здесь). Заключение в кавычки из документации:

  • Класс значения: "Объекты классов значения постоянно связаны с переменными, которым им присваивают. Когда объект значения копируется, данные объекта также копируются, и новый объект независим от изменений в исходном объекте. Экземпляры ведут себя как стандартный числовой MATLAB и классы структуры".

  • Класс дескриптора: "Объекты классов дескриптора используют дескриптор для ссылочных объектов класса. Дескриптор является переменной, которая определяет конкретный экземпляр класса. Когда объект дескриптора копируется, дескриптор копируется, но не данные, хранившие в свойствах объекта. Копия называет те же данные оригиналом — при изменении значения свойства на исходном объекте скопированный объект отражает то же изменение".

Пример кода ниже дает некоторые примеры того, как взаимодействовать с "вложенными" объектами как Вы описанный выше, и для вложенных объектов класса значения и для вложенных объектов класса дескриптора:

% For value classes:

objC = C(...);  % Make an object of class C, where "..." stands
                %   for any input arguments
objB = B(...,objC);  % Make an object of class B, passing it objC
                     %   and placing objC in field 'objC'
objA = A(...,objB);  % Make an object of class A, passing it objB
                     %   and placing objB in field 'objB'

% If the '.' operator (field access) is defined for the objects:

objA.objB.objC.D = 1;  % Set field 'D' in objC to 1
objA.objB.objC = foo(objA.objB.objC,...);  % Apply a method that
                                           %   modifies objC and
                                           %   returns the new
                                           %   object

% For handle classes:

hC = C(...);  % Get a handle (reference) for a new object of class C
hB = B(...,hC);  % Get a handle for a new object of class B,
                 %   passing it handle hC and placing it in field 'hC'
hA = A(...,hB);  % Get a handle for a new object of class A,
                 %   passing it handle hB and placing it in field 'hB'

% If the '.' operator (field access) is defined for the objects:

hC.D = 1;  % Set field 'D' to 1 for object referenced by hC; Note
           %   that hC and hA.hB.hC both point to same object, and
           %   can thus be used interchangably
foo(hC);  % Apply a method that modifies the object referenced by hC

% If instead using get/set methods for the handle object:

set(hC,'D',1);
set(get(get(hA,'hB'),'hC'),'D',1);  % If variable hC wasn't made, get
                                    %   reference from nested objects
foo(hC);
foo(get(get(hA,'hB'),'hC'));

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

Надежда, которой это помогает с тем, что Вы спрашивали.

2
ответ дан 4 December 2019 в 14:32
поделиться
Другие вопросы по тегам:

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