Если в объекте Order будет зависимость ProductList, то не нарушает SRP, тк этот объект (судя по названию) VO и состояние этого объекта необходимо для работы Order.
Но вызывает вопросы способ работы с ним:
создавать отдельный метод getProductList, в котором будет инициализирован класс
Почему не в конструкторе объекта Order? Или почему не из зависимости извне (DI) вообще получать товары?
class Order
{
private ProductStorageInterface $products;
public function __construct(ProductStorageInterface $products)
{
$this->products = $products;
}
public function refundProduct(Product $product): void
{
// логика возврата товара
// и соответственно изменение состава $this->products
}
}
И товары могут подгрузиться из памяти, БД или АПИ внешней.
Тут заодно и принцип инверсии зависимости
UPD: Не называйте метод
getProductList()
, это ужасно! Называйте как есть:
createProductList()
или
loadProductList()
, ну в зависимости от логики.
get -- слишком общее слово и совсем не говорит о том, что происходит. Если все кругом будет сервисами (service) с методами get, то вам весело будет жить...