if - else 가 너무 깊 게 박 혀 있다 고요?초보 자 들 이 다 파악 할 수 있 는 디자인 모델 을 알려 줄 게!
출처 l Hollis (ID: hollischuang)
나 도 디자인 안 해도 돼.
많은 사람들 이 자신 이 쓴 것 이 업무 코드 라 고 생각 하고 논리 적 으로 쓴 다음 에 공용 방법 을 추출 하여 재 활용 하면 된다. 디자인 모델 은 전혀 사용 할 필요 도 없고 배 울 필요 도 없다.
처음 엔 나 도 그렇게 생각 했 어. 내 가 만 날 때 까지...
밤 을 들다
우 리 는 먼저 일반적인 하단 차단 인 터 페 이 스 를 보 았 다.
기본 논리, 매개 변수 안전 차단, 횟수 차단, 규칙 차단 을 모두 통과 합 니 다. 다음 주문 을 허용 하고 임의의 실 패 를 반환 하 며 대응 하 는 실패 원인 을 되 돌려 줍 니 다.
다 중 끼 워 넣 기 if 쓰기
우리 정상 다 층 끼 워 넣 기 if 의 쓰기
/**
* @author saier
* @date 2020/3/31 18:03
*/
public class Order {
public Message interrupt1(){
return null;
}
public Message interrupt2(){
return null;
}
public Message interrupt3(){
return null;
}
public Message interrupt4(){
return null;
}
public Message interrupt5(){
return null;
}
public static void main(String[] args) {
Order order= new Order();
if(order.interrupt1().getResult() == 1){
if(order.interrupt2().getResult() == 1){
if(order.interrupt3().getResult() == 1){
if(order.interrupt4().getResult() == 1){
if(order.interrupt5().getResult() == 1){
System.out.println("success");
}
}
}
}
}
}
}
@Data
class Message {
private int result;
private String msg;
}
이상 처리 논리
혹은 이상 을 이용 하여 논 리 를 한다 면 코드 는 좀 간단 할 것 이다.
/**
* @author saier
* @date 2020/3/31 18:03
*/
public class Order2 {
public void interrupt1(){
}
public void interrupt2(){
}
public void interrupt3(){
//
throw new RuntimeException();
}
public void interrupt4(){
//
throw new RuntimeException();
}
public void interrupt5(){
//
throw new RuntimeException();
}
public static void main(String[] args) {
Order2 order2= new Order2();
try{
order2.interrupt1();
order2.interrupt2();
order2.interrupt3();
order2.interrupt4();
order2.interrupt5();
System.out.println("success");
}catch (RuntimeException e){
System.out.println("fail");
}
}
}
처음부터 나 는 이상 을 이용 해 논 리 를 했다.그러나 후속 논리 가 갈수 록 복잡 해 지면 서 문제 가 생 길 수도 있다.예 를 들 어 이상 은 이상 정보 만 되 돌려 줄 수 있 고 더 많은 필드 정 보 를 되 돌려 줄 수 없습니다.
뒤에 도 이상 하 게 논리 적 으로 아 리 규범 에 서 는 금지 되 어 있다 는 점 을 주목 했다.
아 리 코드 규범: [강제] 이상 은 절차 통제, 조건 통제 에 사용 하지 마 세 요.설명: 이상 설계 의 취 지 는 프로그램 운행 중의 각종 의외 의 상황 을 해결 하 는 것 이 고 이상 한 처리 효율 은 조건 판단 방식 보다 훨씬 낮다.
더 중요 한 것 은 코드 의 가 독성 이 너무 떨 어 지고 수시로 한 방법의 이상 을 던 지 며 코드 자체 의 이상 도 고려 해 야 한 다 는 것 이다.
더 좋 은 방법 이 없어 서 디자인 모델 을 고려 할 수 밖 에 없다.
어떻게 고치 면 코드 의 가 독성 이 높 고 확장 성 이 좋 습 니까?
동료의 주 의 를 받 아 갑자기 디자인 모델 이 생각 났 다!
우리 가 원 하 는 목적
이런 장면 에서 책임 체인 모델 에 매우 적합 하 다.(어떤 장면 에서 어떤 디자인 모델 을 사용 하 는 지 평소에 쌓 고 각종 디자인 모델 의 기본 적 인 사용 을 알 아야 한다)
책임 체인 은 말 그대로 관련 업무 책임 을 처리 하 는 집행 체인 이다. 집행 체인 에 여러 개의 노드 가 있 고 모든 노드 가 요구 업 무 를 처리 할 기회 (조건 일치) 가 있다. 만약 에 특정한 노드 가 처리 되면 실제 업무 수요 에 따라 다음 노드 에 계속 처리 하거나 처리 할 수 있다.
우선 필터 의 추상 클래스 를 만 듭 니 다.
public abstract class AbstractFilter {
private AbstractFilter nextFilter;
/**
*
*/
public void setNextFilter(AbstractFilter nextFilter){
this.nextFilter = nextFilter;
}
public AbstractFilter getLastFilter(){
if(this.nextFilter != null){
return this.nextFilter.getLastFilter();
}else{
return this;
}
}
public void filter(FilterRequest filterRequest, Response response){
doFilter(filterRequest,response);
if(response.isFilterNext() && nextFilter != null){
nextFilter.filter(filterRequest,response);
}
}
/**
*
*/
public abstract void doFilter(FilterRequest filterRequest, Response response);
/**
*
*/
public void exec(FilterRequest filterRequest, Response response){
}
}
필터 구현 클래스
@Component
@Order(5)
public class CheckParamFilter1 extends AbstractFilter {
@Override
public void doFilter(FilterRequest filterRequest, Response response) {
}
}
@Component
@Order(10)
public class CheckParamFilter2 extends AbstractFilter {
@Override
public void doFilter(FilterRequest filterRequest, Response response) {
}
}
Order 주 해 를 사용 하여 필터 의 순 서 를 확인 하고 나중에 spring 에 주입 할 때 큰 효과 가 있 습 니 다.
// spring
@Autowired
List abstractFilterList;
private AbstractFilter firstFilter;
//spring
@PostConstruct
public void initializeChainFilter(){
// , Order ,
for(int i = 0;i
디자인 모델 을 사용 하 는 장점
책임 체인 모드 를 사용 하면 어떤 좋 은 점 이 있 는 지 보 세 요!
낮은 결합, 높 은 확장 을 이 루 었 습 니 다.안 좋 은 점도 가 져 왔어요.
어느 곳 에서 든 디자인 모델 을 사용 하기에 적합 한 것 은 아니다. 만약 에 논리 가 간단 하 다 면 디자인 모델 을 억지로 사용 하면 구조 적 으로 복잡 할 뿐 모두 가 사람들의 업무 장면 에 따라 사용 할 수 있다.
: 100 , 8 , ?
—Vue
6 @Transactional
, 。
,
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.