php 노트:AOP 의 응용
<?php
class BlogPost extends CI_Controller
{
public function createPost() {
if (!Authentication::checkAuthentication()) {
// redirect to login
}
else {
// proceed
Messages::notifyAdmin();
}
}
public function approvePost() {
if (!Authentication::checkAuthentication()) {
// redirect to login
}
else {
// proceed
}
}
public function editPost() {
if (!Authentication::checkAuthentication()) {
// redirect to login
}
else {
// proceed
}
}
public function viewPost() {
// ...
}
}
위의 코드 를 보면 모든 방법 전에 checkAuthentication()을 호출 한 것 을 발견 할 수 있 습 니 다.사용자 가 로그 인 한 후에 야 할 수 있 기 때 문 입 니 다.그리고 notifyAdmin()은 관리자 계 정 인지 아 닌 지 를 판별 하여 새 게시 물 을 만 들 수 있 도록 합 니 다.보이 시 나 요?'중복 코드'가 많 고 블 로그 포스트 류 는 게시 물 관리 만 해 야 합 니 다.신분 검증 과 판별 은 분리 되 어야 한다.우 리 는 단일 직책 원칙 을 위반 했다.단일 직책 원칙 은 각 유형 이 단일 한 책임(임무)만 있어 야 하고 전체 책임 을 한 유형 에 포장 해 야 한 다 는 것 을 말한다.모든 서 비 스 는 직책 에 따라 엄밀 하고 균형 있 게 분포 해 야 한다.
지금까지 우 리 는 AOP 가 표현 한 뜻 을 이해 할 수 있 었 다.가로 절단면 관 계 는 한 종류 에 조합 되 어 있 는데 우 리 는 이런 종 류 를'절단면'이 라 고 부른다.우리 의 핵심 코드 에서 가로 절단면 관 계 를 분리 하 는 과정 을 Aspect Oriented Programming 이 라 고 합 니 다.AOP 전문 용 어 는 AOP 의 특성 을 설명 하 는 데 전문 적 으로 사용 되 는 조건 이 많다.이 조건 들 을 이해 하 는 것 은 AOP 를 프로젝트 에 통합 하 는 데 성공 하 는 열쇠 가 될 것 이다.Aspect Advice Joinpoint Pointcut 우 리 는 절단면(Aspect)이 무엇 인지 배 웠 습 니 다!이제 다른 세 가지 조건 이 무엇 을 의미 하 는 지 알 아 볼 까요?Advice(알림)Advice 는 Aspect(절단면)를 호출 하 는 데 사 용 됩 니 다.이름 이 암시 하 는 바 와 같이 Advice 는 특정한 상황 에서 무엇 을 하고 언제 이 일 을 하 는 지 정의 하 는 데 사 용 됩 니 다.이전 예 에서 checkAuthentication(무엇 을 하 는 지)은 advice(알림)입 니 다.지정 한 방법 에서 코드 를 실행 하기 전에(언제)호출 되 어야 합 니까? Joinpoint(접속 점)Joinpoint 는 우리 가 Advice 응용 프로그램 을 만 드 는 위치 입 니 다.이전의 코드 를 다시 뒤 져 보면,너 는 내 가 업무 논리 와 직접적인 관련 이 없 는 몇 가지 기능 을 호출 한 것 을 발견 할 수 있 을 것 이다.createPost()에서 예 를 들 어 cross-cutting concerns 는 검증 논 리 를 실행 하기 전에 관리자 에 게 메 시 지 를 보 낸 후에 발생 해 야 합 니 다.이것들 은 모두 접속 점 일 수 있다.응용 코드 에서 접속 점 은 모든 위치 에 놓 을 수 있 습 니 다.그러나 Advice 는 어떤 점 에서 만 배치 할 수 있 습 니 다.이것 은 당신 의 AOP 프레임 워 크 에 따라 나중에 토론 하 겠 습 니 다.포인트 컷(점 절단) 점 절단 은 통 지 를 일부 접속 점 에 일치 시 키 는 방식 을 정의 했다.비록 우리 의 예 에서 한 쌍 의 접속 점 만 있 지만,당신 의 응용 에서 수천 개의 접속 점 을 설치 할 수 있 습 니 다.당신 도 모든 접속 점 에 알림 을 적용 할 필요 가 없습니다.너 는 네가 필요 하 다 고 생각 하 는 접속 점 을 통지 에 연결 할 수 있다.만약 에 우리 가 createPost(),approvePost()와 editPost()를 알 리 고 싶 지만 지금 은 view Post()가 없습니다.우 리 는 어떤 방법 을 사용 하여 이 세 가지 방법 을 통지 에 귀속 시 켰 다.그 후에 우 리 는 절단면 디 테 일 을 포함 하 는 XML 파일 을 만 들 었 습 니 다.이 디 테 일 은 접속 점 과 일치 하 는 정규 표현 식 을 포함 합 니 다.요약:가로 절 입 관계 가 우리 의 응용 에 존재 할 때 우 리 는 절 면 을 만 들 수 있 습 니 다.이 절 면 은 점 절 개 를 선택 한 접속 점 에서 알림 기능 을 사용 할 수 있 습 니 다. AOP 알림 유형 알림 코드 는 우리 가 여러 가지 방식 으로 표현 할 수 있다.제 가 전에 말씀 드 렸 듯 이 이 알림 코드 는 당신 이 사용 하 는 프레임 워 크 에 의존 하지만 익숙 한 유형 이 있 습 니 다.아래 를 보 세 요.앞의 알림 이 돌아 온 후에 알림 을 던 진 후에 주변 알림 에 알 리 기 전에 알림 을 사용 하 세 요.정상 적 인 것 은 하나의 방법 을 사용 하 는 것 입 니 다.지금까지 개념 을 간소화 하고 코드 를 더 빨리 이해 할 수 있 도록 방법 에 통 지 를 자주 썼 습 니 다.그러나 실제 환경 에서 통 지 는 방법 에 쓰 이지 않 는 경우 가 많다.모든 방법 이 이 컨트롤 러 안에 있 고 모든 방법 이 AOP 의 기능 을 감 싸 고 있 는 독립 된 컨트롤 러 가 있어 야 한다.이 전역 컨트롤 러 는 전체 시스템 에서 실행 되 고 우리 에 게 는 보이 지 않 습 니 다.4567913)여기 서 이런 유형 이 있다 고 가정 하면 주로 이런 유형 이 실제로 무슨 일이 일 어 났 는 지 보 여 주 는 데 쓰 인 다.만약 에 그 controlPaths 방법 이 응용 에서 전역 적 인 접근 점 이 라 고 가정 하면 응용 에 접근 하 는 모든 방법 은 이 방법 을 통 해 방문 해 야 합 니 다.위의 방법 에서 모든 방법 을 실행 하기 전에 우 리 는 checkAuthentication()을 호출 했다.이것 이 바로 전 통지 다.
반환 후 이 알림 은 지정 한 기능 이 실 행 된 후에 한 번 만 실행 하고 그 방문 점 으로 돌아 가라 고 알려 줍 니 다.다음 코드 를 고려 하 십시오:
<?php
class PathController
{
function controlPaths($className, $funcName) {
Authentication::checkAuthentication();
$classObj = new $className();
$classObj->$funcName();
}
}
Ctrl+C 를 누 르 면 여 기 를 주의 하 십시오.방법 이 완 료 된 후에 우 리 는 데이터베이스 자원 을 정리 하 였 습 니 다.통 지 를 되 돌려 준 후에 우 리 는 이 통 지 를 호출 했다.던 진 후 알림 을 실행 하 는 동안 함수 가 이상 을 던 지면 이상 을 던 진 후에 알림 을 적용 합 니 다.이상 을 던 지면 알림 이 잘못된 알림 이 됩 니 다.
<?php
class PathController
{
function controlPaths($className, $funcName) {
$classObj = new $className();
$classObj->$funcName();
Database::closeConnection();
}
}
주변 알림 의 네 번 째 통 지 는 주변 알림 입 니 다.그 는 이전 알림 과 복귀 후 알림 의 합병 체 입 니 다.
<?php
class PathController
{
function controlPaths($className, $funcName) {
try {
$classObj = new $className();
$classObj->$funcName();
}
catch (Exception $e) {
Error::reportError();
}
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Laravel - 변환된 유효성 검사 규칙으로 API 요청 제공동적 콘텐츠를 위해 API를 통해 Laravel CMS에 연결하는 모바일 앱(또는 웹사이트) 구축을 고려하십시오. 이제 앱은 CMS에서 번역된 콘텐츠를 받을 것으로 예상되는 다국어 앱이 될 수 있습니다. 일반적으로 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.