Вы полностью далеки от SRP
(Single Responsibility Principle
). Как SRP
работа полностью не видна в вашем коде. Это нормально, что у вас есть классы, они отвечают за разные работы. Может быть или, я думаю, они реализованы с соблюдением SRP
. Видимость SRP в вашем коде намного меньше, кроме предположения.
В OOP
классы зависят от других классов. Это абсолютно нормально. Dependency Injection
полностью видно в вашем коде. Но вы не можете поддерживать Dependency Injection
с помощью метода конструктора так, как вы это делали при построении сложной структуры. Это должно быть следующим образом:
<?php
// given string is not empty
$nonEmptyString = new NonEmptyString('/tmp/xyzk7kjnbrukhg');
// validates for string to be a path
$path = new Path($nonEmptyString);
// validates given string is a valid file path
$filePath = new FilePath($path);
// validates given file is uploaded file
$uploadedFile = new UploadedFile($filePath);
// checks given item is a readable file / permissions check
$readableFile = new ReadableFile($uploadedFile);
// makes sure given file is an image file
$imageFile = new ImageFile($readableFile);
// holds all rules for product image only
$productImage = new ProductImage($imageFile);
Но это также неправильный способ сделать это . Для этого нужно использовать Factory Method Design Pattern
. Factory Method Design Pattern
фактически создает другие объекты. Предполагая, что у вас есть реализация шаблона фабричного метода, и он будет отвечать за создание объекта ImageFile
, поскольку ProductImage
имеет зависимость ImageFile
. Предполагая, что вы импортировали все необходимые классы в следующем фрагменте кода:
<?php
class ImageFileFactory implements FactoryInterface
{
public static function make($string)
{
// given string is not empty
$nonEmptyString = new NonEmptyString($string);
// validates for string to be a path
$path = new Path($nonEmptyString);
// validates given string is a valid file path
$filePath = new FilePath($path);
// validates given file is uploaded file
$uploadedFile = new UploadedFile($filePath);
// checks given item is a readable file / permissions check
$readableFile = new ReadableFile($uploadedFile);
// makes sure given file is an image file
return new ImageFile($readableFile);
}
}
// Creates ImageFile instance
$imageFile = ImageFileFactory::make('/tmp/xyzk7kjnbrukhg');
// holds all rules for product image only
$productImage = new ProductImage($imageFile);
О! У меня есть запись на носителе SRP
. Если вы можете прочитать это. Вот ссылка SRP
Надеюсь, это поможет вам! Удачного кодирования!