Java 디자인 모델 프로그래밍에서의 단일 직책 원칙을 간단히 설명하다
왜 단일 직책 원칙이 필요합니까?
만약 한 종류가 여러 가지 이유로 그것을 수정해야 한다면, 한 기능을 수정할 때, 다른 기능에 버그가 생길 수 있기 때문에, 한 종류는 하나의 직책만 있는 것이 가장 좋다.그러나 실제 응용에서는 실현하기 어렵다. 우리는 가능한 한 이 원칙에 부합할 수밖에 없다.
때때로 개발자가 인터페이스를 설계할 때 문제가 있다. 예를 들어 사용자의 속성과 사용자의 행위가 하나의 인터페이스에 놓여 성명된다.이로 인해 업무 대상과 업무 논리가 함께 놓이게 되었다. 그러면 이 인터페이스는 두 가지 직책이 있고 인터페이스 직책이 명확하지 않으며 SRP의 정의에 따라 인터페이스의 단일 직책 원칙에 위배된다.
다음은 예입니다.
package com.loulijun.chapter1;
public interface Itutu {
//
void setShengao(double height);
double getShengao();
//
void setTizhong(double weight);
double getTizhong();
//
boolean chiFan(boolean hungry);
//
boolean shangWang(boolean silly);
}
위의 예에서 이 문제가 존재한다. 키, 체중은 업무 대상에 속하고 그에 상응하는 방법은 주로 사용자의 속성을 책임진다.한편, 밥을 먹고 인터넷을 하는 것은 상응하는 업무 논리로 주로 사용자의 행위를 책임진다.그러나 이것은 이 인터페이스가 도대체 무엇을 하는지 알 수 없는 느낌을 주고 직책이 명확하지 않으며 후기에 유지할 때도 여러 가지 문제를 일으킬 수 있다.해결 방법: 단일 직책 원칙, 이 인터페이스를 두 직책이 다른 인터페이스로 분해하면 된다
ItutuBO.java:tutu(칠, 만약 인명)의 속성을 담당합니다
package com.loulijun.chapter1;
/**
* BO:Bussiness Object,
*
* @author Administrator
*
*/
public interface ItutuBO {
//
void setShengao(double height);
double getShengao();
//
void setTizhong(double weight);
double getTizhong();
}
ItutuBL.java: 바르는 행위 담당
package com.loulijun.chapter1;
/**
* BL:Business Logic,
*
* @author Administrator
*
*/
public interface ItutuBL {
//
boolean chiFan(boolean hungry);
//
boolean shangWang(boolean silly);
}
이렇게 하면 인터페이스의 단일한 직책을 실현할 수 있다.그러면 인터페이스를 실현할 때 두 가지 다른 종류가 필요하다TutuBO.java
package com.loulijun.chapter1;
public class TutuBO implements ItutuBO {
private double height;
private double weight;
@Override
public double getShengao() {
return height;
}
@Override
public double getTizhong() {
return weight;
}
@Override
public void setShengao(double height) {
this.height = height;
}
@Override
public void setTizhong(double weight) {
this.weight = weight;
}
}
TutuBL.java
package com.loulijun.chapter1;
public class TutuBL implements ItutuBL {
@Override
public boolean chiFan(boolean hungry) {
if(hungry)
{
System.out.println(" ...");
return true;
}
return false;
}
@Override
public boolean shangWang(boolean silly) {
if(silly)
{
System.out.println(" , ...");
return true;
}
return false;
}
}
이렇게 하면 명확해진다. 사용자 속성을 수정해야 할 때 ItutuBO라는 인터페이스를 수정하면 TutuBO 클래스에만 영향을 주고 다른 클래스에는 영향을 주지 않는다.요약:
1. 실제 상황은 우리가'변화를 일으키는 원인'을 미리 예견할 수 없는 경우가 많기 때문에 우리는 경험에 따라 우리의 인터페이스를 구축하고 가능한 한 하나의 인터페이스는 하나의 직책만 할 수 있다.여기서 말하는 것은 인터페이스이다. 클래스는 여러 개의 인터페이스를 계승하고 실현할 수 있기 때문에 단일한 직책을 실현하기 더욱 어렵다.
2. 이전에 쓴 클래스가 이미 여러 가지 변화를 일으킨 원인이 있을 때 우리는 코드 재구성을 하는 것이 가장 좋다.
그러나 단일 직책 원칙을 사용하는 데 문제가 하나 있다.'직책'은 명확한 구분 기준이 없다. 만약에 직책을 너무 세밀하게 구분하면 인터페이스와 실현류의 수량이 급증하고 오히려 복잡도를 높여 코드의 유지보수성을 낮출 수 있다.그래서 이 직책을 사용할 때 구체적인 상황을 구체적으로 분석해야 한다.건의는 인터페이스는 반드시 단일 직책 원칙을 채택하고 유형의 디자인을 실현하는 데 가능한 한 단일 직책 원칙을 해야 하며 가장 좋은 것은 하나의 원인이 하나의 유형의 변화를 일으키는 것이다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JPA + QueryDSL 계층형 댓글, 대댓글 구현(2)이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다. 이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다. 이번에는 그 N+1 문제를 해결해 볼 것이다. 위의 로직은 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.