Dependency Injection, временные переменные и примитивы

143
05 мая 2019, 01:10

Предположим в одном из компонентов, в каком-то методе нужно открыть файл. Если делать это через BufferedReader в блоке try/catch с ресурсами, например, то получается что компонент зависит от BufferedReader, но ведь не передавать же любую временную переменную не-примитивного типа в конструкторе, чтобы избежать зависимости? Как это красиво "исправить"?

P.S. Надеюсь вопрос ясен

Answer 1

Имхо. Вы можете посмотреть на картину по-другому. Допустим вам нужно открыть файл (прочитать из него текст?). Почему бы не создать что-то вроде FileService и передавать как зависимость его. И метод реализовывать внутри этого сервиса. (ну и конечно же интерфейс создать для методов, которые вам нужны). Тогда мы сможем изменять способ получения данных из файла в самом сервисе, не затрагивая свой класс. Это и будет слабая связанность. С другой стороны Вы не должны бояться зависимости от bufferedReader. Какова вероятность того, что вы его на что-то будете заменять в дальнейшем? BufferedReader всего лишь читает вам файл. Стоит посмотреть на то, что этот ридер Вам даёт. Какую-то информацию? Планируется ли (возможно ли) эту же информацию получать другим путем? Если да, то создайте сервис, который будет эту информацию возвращать, при этом только он сам будет знать, как он её получает. А если у вас информация из файла, и она всегда будет читаться из файла, то не стоит боятся связанности. Мы должны стремиться к наименьшей связанности, а не избавляться от её вообще.

READ ALSO
Количество созданий новых строк в куче

Количество созданий новых строк в куче

Один из вопросов в OCA7 выглядит так:

132
Что пишут на java? [закрыт]

Что пишут на java? [закрыт]

Я никак не понимаю, что я буду делать на работе, выучив джавуНазовите, пожалуйста, примеры программ, к-е на ней чаще пишутся

186
Бесконечное развертывание в NetBenas

Бесконечное развертывание в NetBenas

Столкнулся с проблемой при запуске проекта Spring MVCПосле запуска бесконечное развертывание происходит

147