디자인 모델 6 대 원칙 (2): 개방 폐쇄 원칙
폐쇄 원칙 개발 (개방 형 원리 OCP)
Software entities(classes,modules,functions etc) should open for extension ,but close for modification.
무슨 뜻 이 죠?
개방 폐쇄 원칙 이란 소프트웨어 실체 가 확장 개발 을 하고 수정 을 폐쇄 해 야 한 다 는 것 이다.개방 폐쇄 원칙 은 모든 대상 지향 원칙 의 핵심 이다.소프트웨어 디자인 자체 가 추구 하 는 목 표 는 패 키 징 변화 이 고 결합 을 낮 추 는 것 이다. 개방 폐쇄 원칙 은 바로 이 목표 에 대한 가장 직접적인 표현 이다.
개방 폐쇄 원칙 은 주로 두 가지 측면 에 나타난다.
확장 개방 은 새로운 수요 나 변화 가 있 을 때 기 존 코드 를 확장 하여 새로운 상황 에 적응 할 수 있 음 을 의미 합 니 다.
수정 이 폐쇄 된 것 은 류 가 일단 설계 가 완성 되면 독립 적 으로 일 을 할 수 있 고 류 에 대해 어떠한 수정 도 하지 않 는 다 는 것 을 의미한다.
왜 개방 폐쇄 원칙 을 써 야 합 니까?
소프트웨어 수 요 는 항상 변화 한다. 세계 에서 변 하지 않 는 소프트웨어 가 하나 도 없 기 때문에 소프트웨어 설계 자 에 게 는 기 존의 시스템 을 수정 하지 않 아 도 되 는 상황 에서 유연 한 시스템 확장 을 실현 해 야 한다.
어떻게 확장 개방, 수정 폐쇄 를 할 수 있 습 니까?
개방 폐쇄 를 실현 하 는 핵심 사상 은 추상 프로 그래 밍 이지 구체 적 인 프로 그래 밍 이 아니다. 추상 이 상대 적 으로 안정 적 이기 때문이다.종 류 를 고정된 추상 에 의존 하 게 하기 때문에 수정 에 대해 폐쇄 적 인 것 이다.한편, 대상 을 대상 으로 하 는 계승 과 다 형 체 제 를 통 해 추상 체 에 대한 계승 을 실현 할 수 있 고 그 방법 을 복사 하여 고유 행 위 를 바 꾸 고 새로운 확장 방법 을 실현 할 수 있 기 때문에 확장 에 있어 개방 적 이다.
이 원칙 을 위반 하 는 유형 에 대해 서 는 재 구성 을 통 해 개선 해 야 한다.실현 에 자주 사용 되 는 디자인 모델 은 주로 Template Method 모델 과 Strategy 모델 이 있다.한편, 포장 변 화 는 이 원칙 을 실현 하 는 중요 한 수단 으로 자주 변화 하 는 상 태 를 하나의 유형 으로 포장 하 는 것 이다.
은행 업무원 을 예 로 들다
OCP 가 구현 되 지 않 은 디자인:
public class BankProcess
{ //
public void Deposite(){}
//
public void Withdraw(){ }
//
public void Transfer(){}
}
public class BankStaff
{
private BankProcess bankpro = new BankProcess();
public void BankHandle(Client client)
{
switch (client.Type)
{ //
case "deposite":
bankpro.Deposite();
break;
//
case "withdraw":
bankpro.Withdraw();
break;
//
case "transfer":
bankpro.Transfer();
break;
}
}
}
이런 디자인 은 분명히 문제 가 존재 한다. 현재 디자인 에서 저금, 인출 과 이체 세 가지 기능 만 있다. 앞으로 업무 가 증가 하면 예 를 들 어 구 매 신청 기금 기능, 재 태 크 기능 등 을 추가 하면 반드시 Bankprocess 업무 유형 을 수정 해 야 한다.우 리 는 상기 디자인 을 분석 하면 업 무 를 한 가지 유형 에 밀봉 하지 못 하고 단일 직책 원칙 을 위반 하 며 새로운 수요 가 발생 하 는 것 을 발견 할 수 없다. 반드시 기 존 코드 를 수정 해 야 하 는 것 은 개방 폐쇄 원칙 을 위반 한 것 이다.
개방 폐쇄 의 측면 에서 분석 하면 은행 시스템 에서 가장 확 장 될 수 있 는 것 은 업무 기능 의 증가 나 변경 이다.업무 절 차 를 확장 하 는 부분 으로 실현 해 야 한다.새로운 기능 이 있 을 때 기 존 업 무 를 다시 정리 한 다음 에 시스템 을 크게 수정 할 필요 가 없다.
어떻게 해야만 결합 도와 유연성 을 동시에 얻 을 수 있 습 니까?
그것 은 추상 적 인 것 이다. 업무 기능 을 인터페이스 로 추상 화하 고 업무원 이 고정된 추상 에 의존 할 때 수정 은 폐쇄 적 인 것 이 고 계승 과 다 중 계승 을 통 해 추상 체 에서 새로운 실현 을 확대 하 는 것 이 바로 확장 에 대한 개방 이다.
다음은 OCP 에 맞 는 디자인 입 니 다.
우선 업무 처리 인 터 페 이 스 를 설명 합 니 다.
public interface IBankProcess{ void Process();}
public class DepositProcess : IBankProcess
{
public void Process()
{ //
Console.WriteLine("Process Deposit");
}
}
public class WithDrawProcess : IBankProcess
{
public void Process()
{ //
Console.WriteLine("Process WithDraw");
}
}
public class TransferProcess : IBankProcess
{
public void Process()
{ //
Console.WriteLine("Process Transfer");
}
}
public class BankStaff
{
private IBankProcess bankpro = null;
public void BankHandle(Client client)
{
switch (client.Type)
{ //
case "Deposit":
userProc = new DepositUser();
break;
//
case "Transfer":
userProc = new TransferUser();
break;
//
case "WithDraw":
userProc = new WithDrawUser();
break;
}
userProc.Process();
}
}
이렇게 하면 업무 가 변 경 될 때 대응 하 는 업무 실현 류 만 수정 하면 되 고 다른 무관 한 업 무 는 수정 할 필요 가 없다.업무 가 늘 어 나 면 업무 의 실현 만 늘 리 면 된다.
디자인 제안:
개방 폐쇄 원칙 은 가장 중요 한 디자인 원칙 으로 Liskov 교체 원칙 과 합성 / 중합 재 활용 원칙 은 개방 폐쇄 원칙 에 보증 을 제공한다.
Template Method 모델 과 Strategy 모델 을 재 구성 하여 수정 에 대한 폐쇄 를 실현 하고 개방 적 인 디자인 방향 을 확대 할 수 있 습 니 다.
포장 변 화 는 개방 폐쇄 원칙 을 실현 하 는 중요 한 수단 으로 자주 변화 하 는 상태 에 대해 일반적으로 이 를 추상 적 인 것 으로 봉 한다. 예 를 들 어 은행 업무 에서 IBankProcess 인터페이스 등 이다.
추상 의 남용 을 거부 하고 자주 변화 하 는 부분 만 추상적으로 한다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.