Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Выручайте, необходимо дописать чуть чуть
Работает на ура, но. Хотелось бы, чтобы возможно было загрузить изображение по url. То есть по ссылке. Кто лучше понимает, что за правки необходимо сделать?
То есть, определить что указать url, затем загрузить по url, поменять размеры и сохранить...
Хелп.
Строитель
Отправлено: 04 Февраля, 2020 - 19:10:55
Участник
Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014 Откуда: Украина
Помог: 73 раз(а)
Gerbyss пишет:
определить что указать url, затем загрузить по url, поменять размеры и сохранить
Для этого не обязательно редактировать исходный класс, можно написать ещё один класс, который будет зависеть от класса SimpleImage:
Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010
Помог: 322 раз(а)
Строитель нет наследование не лучше
лучше композиция это правильно
только реализация очень сумбурная
к этому подтолкнула видимо не лучшая реализация у тс, эдакий ActiveRecord, который умеет сам себя и получать и сохранять и доменную логику делать
отсюда и ломка мозга с непривычки
лучше сделать отдельно интерфейс репозитория(получить, сохранить) с двумя реализицями (файл, урл)
и фабрику которая вернет нужный репозиторий по некоему признаку(например разбор строки даденной, урл это или файл решит)
и потом работать с репозиторием и с полученным им объектом имаги
только не надо в репе сохранять объект, максимум строку адреса(урл, файл)
всего два метода: получить объект по строке, и сохранить переданный объект по переданной строке
не идеал, но пойдет
всеже сильно получше
Строитель
Отправлено: 05 Февраля, 2020 - 22:29:18
Участник
Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014 Откуда: Украина
Помог: 73 раз(а)
LIME пишет:
лучше сделать отдельно интерфейс репозитория(получить, сохранить) с двумя реализицями (файл, урл)
и фабрику которая вернет нужный репозиторий по некоему признаку(например разбор строки даденной, урл это или файл решит)
и потом работать с репозиторием и с полученным им объектом имаги
только не надо в репе сохранять объект, максимум строку адреса(урл, файл)
всего два метода: получить объект по строке, и сохранить переданный объект по переданной строке
Чё-то не получилось. Просидел часок-другой, и понял, что или ты не всё перечислил (например предположил, что я сам догадаюсь), или я не правильно понял суть твоей мысли.
Вроде всё логично. Но как теперь правильно работать с основным классом SimpleImage? Где его надо создавать, в фабрике? Или на клиентской стороне? Это далеко не все вопросы ))
LIME
Отправлено: 06 Февраля, 2020 - 10:31:34
Активный участник
Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010
Помог: 322 раз(а)
Строитель пишет:
например предположил, что я сам догадаюсь
да... не все тебе очевидное очевидно собеседнику
вот пример как если бы тип ресурса указывался в пользовательской форме(а может в конфиге, или настройкой в админке, или днем недели)
конечно много вариантов в зависимости от требований
главное мы отделили мух в репозитории, котлеты в доменный объект, а точка принятия решения о мухах у нас в фабрике(чтоб не раскидывать по клиентскому коду меняющиеся этажерки условий)
кругом SRP и есть только одна причина для изменения классов(логика не связана с хранением)
как бонус OCP (добавление нового источника делается добавлением нового репа и парой строк в фабрике) (Добавление)
Строитель пишет:
Где его надо создавать
в репозитории
ответственность репозитория это получение и сохранение - персистентность короче
и больше ничего (Добавление)
это получается Стратегия
если нам надо получать из разных источников, но сохранять всегда в один, можем загрузчик(разные реализации интерфейса загрузчика) внедрять в конструктор репозитория(тогда он будет один до времени пока нам не понадобится бОльшая детализация) и делегировать загрузку ему
масса вариантов
Строитель
Отправлено: 08 Февраля, 2020 - 21:07:06
Участник
Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014 Откуда: Украина
На данный момент есть существенный недостаток: в зависимости от источника (локальный или удалённый файл) нужно вручную менять имя аргумента в методе $imageObject->load() класса SimpleImage.
Вообще, мне сложно не вмешиваясь в код класса SimpleImage написать его расширение, не используя наследование.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.