Task: Create an Example of Code That Need Refactoring
Before
class CorelogicAu
{
public function getPropertyDetail($id)
{
$response = $this->http->get(SELF::ENDPOINT_ADDRESS . $id);
return $response->getBody()->toArray();
}
}
class CorelogicNz
{
public function getProperty(string $addressId)
{
$coreAddress = $this->http->get(SELF::ENDPOINT_ADDRESS . $id);
$geoLocation = $this->http->get(SELF::ENDPOINT_ADDRESS_COORDINATE . $id);
return array_merge(
$coreAddress->getBody()->toArray(),
$geoLocation->getBody()->toArray()
);
}
}
After
interface CorelogicDatasource
{
public function getProperty(string $id): ?CorelogicProperty;
}
class CorelogicProperty
{
public string $id;
public string $address;
public float $area;
public float $latitude;
public float $longitude;
public function __construct(
string $id,
string $address,
float $area,
float $latitude,
float $longitude
)
{
$this->id = $id;
$this->address = $address;
$this->area = $area;
$this->latitude = $latitude;
$this->longitude = $longitude;
}
}
class CorelogicAu implements CorelogicDatasource
{
public function getProperty(string $id): ?CorelogicProperty
{
$response = $this->http->get(SELF::ENDPOINT_ADDRESS . $id);
$response = $response->getBody()->json();
if (empty($response->id)) {
return null;
}
return new CorelogicProperty(
$response->id,
$response->address,
$response->area,
$response->latitude,
$response->longitude,
)
}
}
class CorelogicNz implements CorelogicDatasource
{
public function getProperty(string $id): ?CorelogicProperty
{
$coreAddress = $this->http->get(SELF::ENDPOINT_ADDRESS . $id);
$coreAddress = $coreAddress->getBody()->json();
$geoLocation = $this->http->get(SELF::ENDPOINT_ADDRESS_COORDINATE . $id);
$geoLocation = $geoLocation->getBody()->json();
if (empty($coreAddress->id)) {
return null;
}
return new CorelogicProperty(
$coreAddress->id,
$coreAddress->address,
$coreAddress->area,
$geoLocation->latitude,
$geoLocation->longitude,
)
}
}
Date
28 July 2023