findBuyableProductメソッドは、ユーザーIDと国のタイプのデータを個別の引数として受け取り、購入可能な商品を検索しています。
引数の数が増えると、メソッドの可読性が低下し、オブジェクト参照のために必要でないデータを含める必要が出てくる場合があります。
<?php
class ProductRepository
{
private ResourceQuery $resourceQuery;
public function __construct(ResourceQuery $resourceQuery)
{
$this->resourceQuery = $resourceQuery;
}
public function findBuyableProduct(int $userId, CountryType $countryType): array
{
// ユーザーIDと国のタイプを使用して、購入可能な商品を検索
$this->resourceQuery->addIntFilter($userId);
$this->resourceQuery->addStringFilter($countryType->value());
// 商品をクエリで検索
return $this->findByQuery($this->resourceQuery);
}
private function findByQuery(ResourceQuery $query): array
{
// クエリを使用して商品をデータベースから検索
// この部分は実際のデータベース検索ロジックを実装する必要があります。
return []; // 仮のダミー値を返しています。
}
}
<?php
class ResourceQuery
{
private array $filters = [];
public function addIntFilter(int $value): void
{
$this->filters[] = $value;
}
public function addStringFilter(string $value): void
{
$this->filters[] = $value;
}
// フィルタを取得するためのメソッド
public function getFilters(): array
{
return $this->filters;
}
}
<?php
class CountryType
{
private string $value;
public function __construct(string $value)
{
$this->value = $value;
}
public function value(): string
{
return $this->value;
}
}
<?php
// 利用時にResourceQueryのインスタンスを注入
$resourceQuery = new ResourceQuery();
$productRepository = new ProductRepository($resourceQuery);
// ユーザーIDと国のタイプを使用して購入可能な商品を検索
$userId = 123;
$countryType = new CountryType('JP');
$buyableProducts = $productRepository->findBuyableProduct($userId, $countryType);