SOLID: PHP를 사용한 소프트웨어 개발의 기본 원칙(2)
이 에피소드에서는 두 번째 원칙인 개방 및 폐쇄 원칙을 구현합니다. 전체 시리즈의 마지막에는 clean으로 실제 애플리케이션을 작성할 것입니다. 끝까지 읽어주시고 명확성이 필요한 부분이 있으면 질문을 남겨주세요. 또한 공유하는 것을 잊지 마십시오. 고맙습니다.
SOLID는 다음을 의미합니다.
S — 단일 책임 원칙
O — 개방-폐쇄 원칙
L — Liskov 대체 원리
I — 인터페이스 분리 원리
D — 종속성 역전 원칙
Open-Closed 원칙은 개체 또는 엔터티가 확장에는 열려 있지만 수정에는 닫혀 있어야 한다고 말합니다.
첫 번째 부분에서는 도형을 수집하고 면적을 계산한 다음 합계를 반환하는 앱을 만들었습니다. 다른 모양이 있다고 가정하면 원칙에 위배되는 areasumcalculator 클래스를 수정해야 합니다.
여기서 우리의 목표는 클래스나 엔터티가 확장될 수 있지만 수정되지 않도록 하는 것입니다.
이를 달성하기 위해 모든 도형이 따라야 하는 인터페이스를 만듭니다.
` 인터페이스 ShapeArea{
공용 기능 영역();
}`
`//예외, 우리의 인터페이스를 구현하지 않는 모양이 제공되는 경우.
InvalideShapeException 클래스는 예외를 확장합니다.
{
공개 $메시지;
함수 __construct($mess = '잘못된 모양')
{
$this->message = $mess;
//'이 모양은 유효하지 않습니다'를 반환합니다.
}
공개 함수 getMyMessage()
{
$this->message 반환;
}
}`
인터페이스를 구현할 모양 클래스를 만듭니다.
class Square implements ShapeArea
{
public $length;
function __construct($length)
{
$this->length = $length;
}
public function area()
{
$area = $this->length * $this->length;
return $area;
}
}
class Circle implements ShapeArea{
public $radius;
function __construct($radius)
{
$this->radius = $radius;
}
public function area()
{
$area = pi() * ($this->radius * $this->radius);
return $area;
}
}
예외를 테스트하기 위해 shapesurface를 구현하지 않는 다른 모양을 만들어 보겠습니다.
class Triangle{
public $breadth;
public $height;
function __construct($breadth,$height)
{
$this->breadth = $breadth;
$this->height = $height;
}
public function myArea()
{
$area = 1/2 * ($this->breadth * $this->height);
return $area;
}
}
이제 areasumcalculator 클래스로 돌아가 보겠습니다.
class AreaSumCalculator{
protected $shapes;
public function __construct($shapes = [])
{
$this->shapes = $shapes;
}
public function sum()
{
$area = [];
foreach($this->shapes as $shape)
{
if(is_a($shape, 'ShapeArea'))
{
$area[] = $shape->area();
}
else{
throw new InvalideShapeException;
}
}
return array_sum($area);
}
}
그런 다음 클래스에서 클래스로 계산된 합계를 출력합니다.
class AreaSumCalculatorOutput{
public $areasumcalculator;
public function __construct(AreaSumCalculator $areasumcalculator)
{
$this->areasumcalculator = $areasumcalculator;
}
public function jsonOutput()
{
$data = [
'sum' => $this->areasumcalculator->sum(),
];
return json_encode($data);
}
}
도형이나 객체를 만들 수 있습니다(클래스의 인스턴스).
$circle = new Circle(10);
$square = new Square(5);
$triangle1 = new Triangle(10,23);
$triangle = new Triangle(1,23);
셰이프 영역의 배열을 허용하는 셰이프 변수 만들기(객체가 생성됨)
$shapes1 = [$circle, $square];
$shapes2 = [$triangle1, $triangle];
첫 번째 모양(원과 사각형)을 테스트하고 인터페이스를 구현합니다.
/ calculate the sum of the areas of the shapes
try{
$area_sum_calculator = new AreaSumCalculator($shapes1);
// answer :
/* {
"sum": 339.1592653589793
}
*/
// output the sum
$area_sum_output = new AreaSumCalculatorOutput($area_sum_calculator);
// call the output
$json_output = $area_sum_output->jsonOutput();
echo $json_output .'<br>';
}catch(InvalideShapeException $e)
{
echo "Caught my exception: \n ";
echo $e->getMyMessage();
}
두 번째 모양 테스트
try{
$area_sum_calculator = new AreaSumCalculator($shapes2);
// answer :
// Caught my exception Invalid shape
// output the sum
$area_sum_output = new AreaSumCalculatorOutput($area_sum_calculator);
// call the output
$json_output = $area_sum_output->jsonOutput();
//echo $json_output;
}catch(InvalideShapeException $e)
{
echo "Caught my exception\n";
echo $e->getMyMessage();
}
읽어 주셔서 감사합니다. 의견, 질문 또는 제안을 삭제할 수 있습니다.
Reference
이 문제에 관하여(SOLID: PHP를 사용한 소프트웨어 개발의 기본 원칙(2)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/elvis_igiebor/solid-fundamental-principles-of-software-development-using-php-2-188l텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)