위에 userService라는 구조체가 있습니다. 여기에는 관계형 데이터베이스와의 통신을 담당하는 db와 RabbitMQ 메시징 서비스와의 통신을 지원하는 amqpChannel라는 두 가지 속성이 있습니다.
UserService는 Create라는 메서드를 구현합니다. 이 방법에서는 수신된 사용자 정보를 데이터베이스에 저장한 다음 해당 데이터를 RabbitMQ에 게시합니다.
userService에서 Create 메소드의 책임은 하나가 아니라 데이터베이스에 정보를 저장하고 RabbitMQ 대기열에 메시지를 게시하는 두 가지임을 알 수 있습니다.
이로 인해 다음과 같은 여러 가지 문제가 발생할 수 있습니다.
다음 코드에서는 SRP를 준수하도록 구조를 수정합니다. 확인 해봐:
책임을 세 가지 별개의 부분으로 분리했습니다. 사용자를 데이터베이스에 유지하는 저장소 UserRepository, RabbitMQ에 메시지를 보내는 게시자 UserPublisher, 이 두 가지 작업을 조율하는 서비스 UserService.
이러한 방식으로 각 구성 요소는 특정하고 독립적인 작업을 담당하여 코드의 유지 관리 및 발전을 촉진할 뿐만 아니라 이러한 각 부분을 다른 부분에 영향을 주지 않고 교체하거나 개선할 수 있습니다. 예를 들어, 사용된 데이터베이스를 변경해야 하는 경우 저장소만 교체하면 됩니다. 소통의 형태를 바꿔야 한다면 출판사만 바꾸면 됩니다.
두 가지 서로 다른 작업을 수행하는 것과 실행을 위임하는 것 사이에는 미묘한 차이가 있다는 점을 언급할 가치가 있습니다. userService.Create의 원래 예에서는 두 작업이 한 곳에서 수행되어 단일 책임 원칙을 위반했습니다. 리팩터링 후 실행을 다른 구조체에 위임했으며 Create 메서드는 이 흐름을 조정하는 역할만 담당했습니다.
이 예에서 SRP를 적용하기 위해 우리는 다른 SOLID 원칙 중 일부도 구현하게 되었습니다.
이 시리즈의 다음 기사에서는 구체적인 예를 들어 각 항목에 대해 더 자세히 설명하겠습니다.
나중에 뵙겠습니다 여러분!
참조:
SOLID: 객체 지향 디자인의 첫 5가지 원칙
Clean Coder 블로그 - 단일 책임 원칙
소프트웨어 개발 세계에서 SOLID 원칙은 코드가 다음과 같이 기능과 데이터를 구성하는 방법을 알려줍니다.
SOLID라는 용어는 아래에 설명된 5가지 설계 가정의 약어입니다.
(S) 단일 책임 원칙: "모듈에는 변경 이유가 하나만 있어야 합니다."
(O) 개방/폐쇄 원칙: "소프트웨어 아티팩트는 확장을 위해 열려야 하지만 수정을 위해서는 닫혀 있어야 합니다."
(L) Liskov 대체 원칙: "파생 클래스는 기본 클래스로 대체 가능해야 합니다."
(I) 인터페이스 분리 원칙: "클래스는 사용하지 않을 인터페이스와 메서드를 구현하도록 강요해서는 안 됩니다."
(D) 종속성 반전 원칙: "구현이 아닌 추상화에 의존"
SOLID는 객체 지향 프로그래밍을 위해 설계되었으며 GoLang은 이러한 패러다임을 채택한 언어가 아닌 것으로 알려져 있습니다. 그러나 OOP 방법론을 충족하기 위해 제공되는 리소스를 사용할 수 있습니다. 예를 들어 Go에는 상속 지원이 없지만 구성 지원으로 아이디어를 보완할 수 있습니다. 마찬가지로 인터페이스를 사용하여 일종의 다형성을 만들 수 있습니다.
5개의 시리즈 중 첫 번째인 이 기사에서는 우리가 일상적으로 접하는 상황에 가까운 예를 들어 첫 번째 원칙을 자세히 설명하려고 합니다.
우리는 이미 이 용어가 무엇을 의미하는지 알고 있습니다. 이제 GoLang에서 이를 구현하는 방법을 배울 차례입니다.
이 언어에서는 이 원칙을 "함수나 유형은 단 하나의 작업과 단 하나의 책임을 가져야 합니다"라고 정의할 수 있습니다. 다음 코드를 살펴보겠습니다.
위에 userService라는 구조체가 있습니다. 여기에는 관계형 데이터베이스와의 통신을 담당하는 db와 RabbitMQ 메시징 서비스와의 통신을 지원하는 amqpChannel라는 두 가지 속성이 있습니다.
UserService는 Create라는 메서드를 구현합니다. 이 방법에서는 수신된 사용자 정보를 데이터베이스에 저장한 다음 해당 데이터를 RabbitMQ에 게시합니다.
userService에서 Create 메소드의 책임은 하나가 아니라 데이터베이스에 정보를 저장하고 RabbitMQ 대기열에 메시지를 게시하는 두 가지임을 알 수 있습니다.
이로 인해 다음과 같은 여러 가지 문제가 발생할 수 있습니다.
다음 코드에서는 SRP를 준수하도록 구조를 수정합니다. 확인 해봐:
책임을 세 가지 별개의 부분으로 분리했습니다. 사용자를 데이터베이스에 유지하는 저장소 UserRepository, RabbitMQ에 메시지를 보내는 게시자 UserPublisher, 이 두 가지 작업을 조율하는 서비스 UserService.
이러한 방식으로 각 구성 요소는 특정하고 독립적인 작업을 담당하여 코드의 유지 관리 및 발전을 촉진할 뿐만 아니라 이러한 각 부분을 다른 부분에 영향을 주지 않고 교체하거나 개선할 수 있습니다. 예를 들어, 사용된 데이터베이스를 변경해야 하는 경우 저장소만 교체하면 됩니다. 소통의 형태를 바꿔야 한다면 출판사만 바꾸면 됩니다.
두 가지 서로 다른 작업을 수행하는 것과 실행을 위임하는 것 사이에는 미묘한 차이가 있다는 점을 언급할 가치가 있습니다. userService.Create의 원래 예에서는 두 작업이 한 곳에서 수행되어 단일 책임 원칙을 위반했습니다. 리팩터링 후 실행을 다른 구조체에 위임했으며 Create 메서드는 이 흐름을 조정하는 역할만 담당했습니다.
이 예에서 SRP를 적용하기 위해 우리는 다른 SOLID 원칙 중 일부도 구현하게 되었습니다.
이 시리즈의 다음 기사에서는 구체적인 예를 들어 각 항목에 대해 더 자세히 설명하겠습니다.
나중에 뵙겠습니다 여러분!
참조:
SOLID: 객체 지향 디자인의 첫 5가지 원칙
Clean Coder 블로그 - 단일 책임 원칙
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3