문제

온라인 문서를 훑어보고 Wiki 항목, 게시물 및 블로그를 읽었지만 여전히 당황 스럽습니다.

  • 간단히 말해서 측면 지향 프로그래밍 ?
  • 객체 지향 프로그래밍보다 단순히 더 낫습니까? OOP를 배출해야합니까?
  • 그렇지 않다면 언제 하나 또는 다른 것을 사용 해야하는지 어떻게 알 수 있습니까? 둘 사이의 주요 차이점은 무엇입니까?
  • 하나를 다른 사람으로 재조정 할 수 있습니까?

나는 항상 OO 남자였으며 반역을 저지 해야하는지 알고 싶습니다.

진지하게, 나는 곧 새로운 프로젝트를 시작했고 처음에 올바른 선택을하고 싶습니다.

도움이 되었습니까?

해결책

간단히 말해서 측면 지향 프로그래밍은 무엇입니까?

간단히 말해서 AOP는 다른 프로그램의 전형적인 흐름에 행동을 주입하는 능력입니다. 클래스 인스턴스화, 메소드 호출, 과제 등을 캡처 할 수 있습니다.

객체 지향 프로그래밍보다 단순히 더 낫습니까? OOP를 배출해야합니까?

아니요. 그것은 그것을 지원하는 모든 프로그래밍 환경과 함께 작동합니다. (위 참조).

그렇지 않다면 언제 하나 또는 다른 것을 사용 해야하는지 어떻게 알 수 있습니까? 둘 사이의 주요 차이점은 무엇입니까?

일반적으로 AOP를 사용하여 수백 개의 클래스에서 수백 개의 클래스에서 어떤 종류의 동작을 구현하고 싶을 때, 클래스 자체를 조작하지 않고 사용합니다. 일반적인 예는 보안 (주어진 방법/클래스를 호출 할 권리의 승인) 또는 로깅입니다. 그러나 내 경험상, 나는 이것을 사용하지 않습니다. (정직하게 전혀 사용하지 않습니다).

위와 같이, 주요 차이점은 비교할 수 없기 때문에 실제로 존재하지 않습니다. 그러나 "정상적으로"로깅을 구현하고 싶다고 가정하면 적절한 지점에서 로거를 호출합니다.

log.write("hello");

그러나 AOP를 사용하면 각 메소드 호출에 첨부 된 '측면'을 생성하고 '메소드 B 호출'로그를 작성할 수 있습니다. 요점은 AOP에서 접근하는 것이 더 '산탄 총'이라는 것입니다. 로깅을 수동으로 추가하는 것이 일반적으로 더 좋습니다.

하나를 다른 사람으로 재조정 할 수 있습니까?

실제로 관련이 없으며 다른 답변을 참조하십시오. 다시 보안을 사용하면 일반적인 OOP 모델에서 isallowed ()에서 AOP 모델로 스왑 할 수 있습니다. }

그 답변이 유용하기를 바랍니다. 내가 더 확장하기를 원한다면 알려주세요.

다른 팁

아니요, AOP는 OOP를 대체하지 않고 보완합니다. AOP와 OOP는 행동을 결합하는 데 도움이되는 다양한 종류의 "접착제"를 제공합니다. 물론 OOP는 상속 및 구성 등을 통해 동작을 결합 할 수 있습니다. 반면 AOP는 주소에 동작을 추가 할 수 있습니다. 교차 절단 문제 가로 채서 포인트 컷 선택한 클래스의 선택한 방법 전후에 새 코드가 실행되는 곳.

교차 절단 문제의 일반적인 예는 보안, 로깅 및 거래 제어입니다. 좋은 디자인의 기반암 원칙은 일관성입니다. 이상적으로는 코드 조각이 한 가지만 수행해야합니다. 예를 들어 데이터 액세스 클래스에 보안 코드를 추가하기 위해 물을 진흙 투성이합니다. AOP는 "측면"에서 동작을 추가 할 수있게하여 해당 측면을 보안 제어가 필요한 모든 클래스에 적용하여 해당 특정 문제를 해결합니다.

AOP는 OOP와 다르며 개발에 대한 완전히 다른 접근 방식입니다.

기본적으로 로깅, 인증 문제, 성능 점검 코드가있는 경우 프로그램의 다양한 부분에서 다른 클래스에서 동일하게됩니다. 따라서 구상대로 신청서를 작성할 수 있습니다. Java에서는 다른 유형의 코드를 추가해야 할 때 (크로스 커팅 문제) 프로그램에 주입하여 컴파일 할 수 있지만 언제. 소스 코드를보고 필요한 비즈니스 로직 만 볼 수 있습니다.

AOP 또는 OOP를 사용하는시기에 대해서는 프로그램을 작성하고 작동하는 다음 기능을 수행 할 때 실제로 기능과 관련이 없지만 다른 목적을 제공하는 코드 제거를보십시오. 예를 들어, 입력 매개 변수를 사용하기 전에 올바른지 확인 해야하는 경우이를 위해 측면을 사용하십시오. 데이터 액세스 계층에 던져진 모든 예외가 로그 파일에 쓰는 것과 같은 유사한 이벤트 처리가있는 경우 이에 대한 측면을 만듭니다.

이러한 크로스 컷팅 문제를 제거하면 코드가 작아집니다.

더 많은 경험을 얻을 수 있으므로 AOP에 더 많은 용도가 표시되지만 처음에는 작성한 다음 AOP를 사용하여 리팩터를 사용하는 것이 좋습니다.

AJDT 플러그인이 측면을 추가하는 위치를 확인하는 데 매우 유용하기 때문에 AP에 Java를 사용하는 경우 Eclipse를 사용하십시오.

Aspect-Oriented Programming은 호출 및 반환과 같은 주요 지점에서 방법이나 기능에 동작 ( "조언"이라고 함)을 삽입하기위한 재미있는 유행어입니다. AOP는 언어에 내장 된 모든 추상화 장벽을 위반하기 때문에 큰 문제가 있습니다. 모듈이 "이것은 측면이 엉망이 될 수있는 것입니다. 이것이 바로 측면입니다. 캔트 "결과적으로, 당신은 내부 불일치를 위반할 위험이 있으며, 모듈 식 추론의 원리를 파괴합니다 (다른 모듈의 인터페이스 외에는 아무것도 이해하지 않고도 모듈을 이해할 수 있습니다).

몇 년 전 Raymie Stata 서브 클래싱 주요 불변량을 위반하는 것을 방지합니다. AOP의 해당 작업은 아직 쓰여지지 않았습니다.

통화를 얻는 다른 아이디어와 마찬가지로 AOP는 몇 가지 멋진 성공을 거두었습니다 (예 : 로깅을 염두에두고 설계되지 않은 애플리케이션으로 로그를 개조). AOP 사용을 매우 간단한 경우에 제한하십시오. 또는 더 나은 방법은 측면 지향 프로그래밍에 대해 거절하는 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top