Введенные свойства должны быть расположены?

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

string.replace(/\s+/g,' ').trim()
6
задан Carl Hörberg 20 May 2009 в 21:11
поделиться

5 ответов

Я бы вообще сказал нет; природа внедрения зависимостей означает, что внедренный объект мало знает о жизненном цикле того, с чем он был внедрен; в какой-то степени это определение инъекции. Таким образом, я не думаю, что внедренный объект должен избавляться от всего, что было внедрено; код внедрения должен нести ответственность за знание полного жизненного цикла всех объектов, которые он вводит, и должен иметь возможность должным образом избавляться от них, когда все операции над ними будут завершены, а не раньше.

4
ответ дан 8 December 2019 в 18:41
поделиться

Если вы имеете в виду шаблон внедрения зависимостей , я думаю, что это зависит от знаний объекта B о реализации объекта A. Причина выполнения внедрения зависимостей обычно это происходит потому, что вы не знаете заранее, как будет реализован объект A и требуется ли для него IDisposable. Единственное, что вы знаете, это интерфейс.

Добавление этого поведения приведет к более тесной связи между двумя классами, IMO.

5
ответ дан 8 December 2019 в 18:41
поделиться

(правка: при ответе мне не было ясно, что вопрос касался IoC / DI; я оставлю это здесь для справки, но сначала посмотрите на принятый ответ).

Если под «введенным» вы имеете в виду, что B принимает право собственности на A , тогда да; Примером этого могут быть такие вещи, как StreamReader .

Если он просто использует A какое-то время (но A продолжает жить после ] B ), затем №

Некоторые API-интерфейсы позволяют вам указать (в конструкторе), следует ли принимать право владения (т.е. очищать ли внедренный объект). Примером этого может быть GZipStream .

2
ответ дан 8 December 2019 в 18:41
поделиться

Я думаю, что это действительно окажется субъективным.

Все будет сводиться к следующему: кто должен контролировать время жизни объекта A?

Скажем, например, объекты C и D также иметь объект A, введенный в них, в этом случае вы не хотите, чтобы объект B избавлялся от объекта A преждевременно.

Однако в некоторых случаях, когда вы знаете, что время жизни объекта A должно заканчиваться на B, вполне уместно иметь объект B избавиться от объекта A.

1
ответ дан 8 December 2019 в 18:41
поделиться

Мои 2p будут утверждать, что A не следует удалять, когда удаляется B. Вся идея внедрения зависимостей заключается в том, что вам не нужно беспокоиться о поведении и жизненном цикле объектов, которые вы получаете, вы просто передаете их.

И снова вы хотите убедиться, что объект будет очищен, как только это больше не требуется. Может быть, создать мини-систему событий, чтобы вы могли уведомить, что ее нужно утилизировать? Думаю, это действительно зависит от контекста.

1
ответ дан 8 December 2019 в 18:41
поделиться
Другие вопросы по тегам:

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