프로젝트 및 개발 RESTful을 위한 의존성 웹 응용 프로그램 주입
11717 단어 PHPBEAR.Sunday
여기 기사에서 그 연설을 바탕으로 한 베어.선데이의 간 부분인 DI, AOP, Resource를 소개하고 싶습니다.
일단 베어.선데이란 레이를 뜻한다.Di、Ray.Aop、BEAR.Resource는 세 개의 객체 프레임으로 구성됩니다.
관전 포인트를 보면 DI(의존적 주입), AOP(종횡 방향 프로그래밍), 리소스(REST 자원) 등의 특징을 지닌 프레임임을 알 수 있다.
DI(의존성 주입)
우선 DI는 Dependency Injection(의존성 주입)이다.
사물에는 반드시 원리·원칙이 있지만, 이 DI에도 원칙이 있다. DIP(Dependency Inversion Principle).
DIP는 다음과 같습니다.
의지하다
이렇게 의존이 야기하는 문제는 다음과 같은 몇 가지가 있다
그걸 설치한 건 레이야.디가 되다.
그럼 실제 간단한 코드를 보고 의존성을 어떻게 주입하는지 봅시다.
1. @Inject를 주입 방법에 제출
구조기는 편성할 필요가 없다.
/**
* @Inject
*/
public function __construct(RenderInterface $renderer)
{
....
2. 의존해야 할 곳에 어떻게 의존하는지 설명한다.class RendererModule extend AbstractModule
{
protected function configure()
{
$this->bind('RendererInterface')
->to('HalRenderer')
->in(Scope::SINGLETON);
}
3. 분사기 제작$injector = Inject::create([new RendererModule]);
$user = $injector->getInstance('UserInterface');
모듈로 만든 주사기는 어떤 의존이 있어야 무엇을 전달할 수 있는지 안다.이 주사기를 사용해 UserInterface 클래스를 얻으면 주사기는 모듈에 의해 결정된 규칙에 따라 교부하는 데 필요한 의존성을 가지고 의존적으로 해결된다.고정된 실례가 없기 때문에 테스트할 때도 쉽게 변경할 수 있다.
AOP(넓은 높이를 위한 프로그래밍)
한마디로 AOP은'가로로 뻗은 관심을 핵심 관심사에서 나누는 것'이다.
여기서 말하는 핵심 취미는 비즈니스 논리로 횡단적인 취미가 넓어지는 것이다.
우선 아래 코드를 보십시오.class Post extends AppModel {
public function newest(){
$result = Cache::read('newest_posts', 'longterm');
if(!$result){
$result = $this->find('all');
Cache::write('newest_posts', $result, 'longterm');
}
return $result;
}
/**
* @Cache
*/
public function onGet($id)
{
// ...
$this->body = $stmt->fetchAll(PDO::FETCH_ASSOC);
return $this;
}
}
위 코드와 같이 캐시 관리와 onGet의 동작이 혼합되어 있습니다.이것은 상업 논리와 응용 프로그램 논리가 혼합되어 있다는 것을 의미한다.
관심을 잘 나누지 못해서 시험도 어렵고 읽기도 어렵고 팩스도 어렵고 이런 문제가 나왔어요.
그렇다면 어떻게 해야만 상술한 코드를 더욱 좋게 할 수 있습니까?
좋아진다는 것은 테스트하기 쉽고 읽기 쉽고 팩스가 쉽다는 것이다.
그걸 이룬 건 AOP이야.
횡단적인 관심(고속 캐시 관리)을 핵심적인 관심에서 분리한 코드는 다음과 같다.class CacheInterceptor implements MethodInterceptor
{
public function invoke(MethodInvocation $invocation)
{
// 横断的な関心
$obj = $invocation->getThis();
$args = $invocation->getArguments();
$id = get_class($obj) . serialize($args);
$saved = $this->cache->fetch($id);
if($saved){
return $saved;
}
$result = $invocation->proceed(); //コアな関心
$this->cache->save($id, $result);
return $result;
}
}
위에서 말한 절단기를 만들고 핵심 흥미를 연결하면 캐시 관리를 통해 핵심 흥미를 처리할 수 있습니다.
RESTful Resource(HyperMedia)
객체를 웹 서비스로 인식하는 아이디어를 실현하는 것은 BEAR입니다.Resource가 됩니다.
다음은 자원 객체입니다.클래스에 URI를 매핑합니다.class Author extende ResourceObject
{
public $code = 200;
public $headers = [];
public $body = [];
/**
* @Link(rel="blog", href="app://self/blog/post?author_id={id}")
*/
public function onGet($id)
{
//...
return $this;
}
public onPost($name)
{
$this->code = 201;
return $this;
}
}
여러분, 주의하신 것은 모조한 @Link 부분입니다.
이것은 URI 템플릿을 사용하여 리소스 간의 링크입니다.
이렇게 REST, API 개발을 중심으로 개발하면 웹이 성공한 이유를 따를 수 있다.
매듭을 짓다
지금까지 본 것을 정리한 결과 베어.Sunday가 무엇인지는 다음과 같다.
Connecting frameworks
class Post extends AppModel {
public function newest(){
$result = Cache::read('newest_posts', 'longterm');
if(!$result){
$result = $this->find('all');
Cache::write('newest_posts', $result, 'longterm');
}
return $result;
}
/**
* @Cache
*/
public function onGet($id)
{
// ...
$this->body = $stmt->fetchAll(PDO::FETCH_ASSOC);
return $this;
}
}
class CacheInterceptor implements MethodInterceptor
{
public function invoke(MethodInvocation $invocation)
{
// 横断的な関心
$obj = $invocation->getThis();
$args = $invocation->getArguments();
$id = get_class($obj) . serialize($args);
$saved = $this->cache->fetch($id);
if($saved){
return $saved;
}
$result = $invocation->proceed(); //コアな関心
$this->cache->save($id, $result);
return $result;
}
}
객체를 웹 서비스로 인식하는 아이디어를 실현하는 것은 BEAR입니다.Resource가 됩니다.
다음은 자원 객체입니다.클래스에 URI를 매핑합니다.
class Author extende ResourceObject
{
public $code = 200;
public $headers = [];
public $body = [];
/**
* @Link(rel="blog", href="app://self/blog/post?author_id={id}")
*/
public function onGet($id)
{
//...
return $this;
}
public onPost($name)
{
$this->code = 201;
return $this;
}
}
여러분, 주의하신 것은 모조한 @Link 부분입니다.이것은 URI 템플릿을 사용하여 리소스 간의 링크입니다.
이렇게 REST, API 개발을 중심으로 개발하면 웹이 성공한 이유를 따를 수 있다.
매듭을 짓다
지금까지 본 것을 정리한 결과 베어.Sunday가 무엇인지는 다음과 같다.
Connecting frameworks
DI - object as dependency
AOP - domain logic to application logic
Hypermedia - resource to resource
DI는 의존적인 연결 대상 사이, AOP는 본질적인 관심과 횡단적인 관심을 연결하고, REST(Hyperrmedia)는 자원 사이를 연결한다.
Abstraction framework
Zen framework
BEAR.선데이는 세련된 선정의 틀이다.간단하지만 완벽하게 조화로운 틀이다.
기사를 쓸 때 참고하는 것
일본어 -> https://bearsunday.github.io/manuals/1.0/ja/tutorial.html
English -> ( https://bearsunday.github.io/manuals/1.0/en/tutorial.html )
1차 투고 때의 수정
Bear.선데이가 아니라 베어.선데이다.
Reference
이 문제에 관하여(프로젝트 및 개발 RESTful을 위한 의존성 웹 응용 프로그램 주입), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/sashiyama/items/50c9239f83ad56cdf56f텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)