플랩은 올바른 방향으로 향합니다. "단일 책임 원칙"은 원래 절차에 적용되었습니다. 예를 들어 Dennis Ritchie는 함수가 한 가지 작업을 수행하고 잘 수행해야한다고 말합니다. 그런 다음 C ++에서 Bjarne Stroustrup은 클래스가 한 가지 일을하고 잘해야한다고 말합니다.
경험적으로,이 두 규칙은 공식적으로 서로 관련이 없거나 거의 관련이 없습니다. 그들은 프로그래밍 언어로 표현하기 편리한 것에 만 적합합니다. 글쎄, 그건 뭔가입니다. 그러나 그것은 플럽이 운전하는 것과는 상당히 다른 이야기입니다.
최신 (즉, 민첩 및 DDD) 구현은 프로그래밍 언어가 표현할 수있는 것보다 비즈니스에 중요한 것에 더 중점을 둡니다. 놀라운 부분은 프로그래밍 언어가 아직 따라 잡지 않았다는 것입니다. 기존 FORTRAN과 유사한 언어는 주요 개념 모델 인 카드 리더를 통과 할 때 각 카드에 적용되는 프로세스 또는 각 인터럽트에 수반되는 처리 (C에서와 같이)에 해당하는 책임을 포착합니다. 그런 다음 ADT 언어가 생겨서 DDD 사람들이 나중에 중요하게 재발견 할 내용을 포착 할 정도로 발전했습니다 (Jim Neighbors는 1968 년까지이 중 대부분을 파악하고 게시하고 사용했지만) . (모듈이 아닙니다.)
이 단계는 진자 스윙보다 진화가 적습니다. 진자가 데이터로 전환함에 따라 FORTRAN 고유의 사용 사례 모델링을 잃었습니다. 주요 초점이 화면의 데이터 또는 모양과 관련되어 있으면 좋습니다. PowerPoint와 같은 프로그램이나 간단한 작업에 적합한 모델입니다.
잃어버린 것은 시스템 책임 입니다. 우리는 DDD의 요소를 판매하지 않습니다. 그리고 우리는 잘 수업 방법이 없습니다. 우리는 시스템 책임을 판매합니다. 어떤 수준에서는 단일 책임 원칙을 중심으로 시스템을 설계해야합니다.
따라서 Rebecca Wirfs-Brock과 같은 사람들이나 클래스 메소드에 대해 이야기했던 사람들을 보면, 우리는 이제 유스 케이스 측면에서 이야기하고 있습니다. 그것이 우리가 판매하는 것입니다. 그것들은 시스템 운영입니다. 유스 케이스에는 단일 책임이 있어야합니다. 유스 케이스는 거의 건축 단위가 아닙니다. 그러나 모든 사람들이 그것을 가장하려고했습니다. 예를 들어 SOA 사람들을 감시하십시오.
이것이 제가 Trygve Reenskaug의 DCI 아키텍처에 대해 기쁘게 생각하는 이유입니다. 위의 린 아키텍처 (Lean Architecture) 책에 설명되어 있습니다. 그것은 마지막으로 "단일 책임"에 대한 자의적이고 신비한 순종이었던 것에 대한 실질적인 입장을 제시한다. 이 키는 인간의 정신 모델과 관련이 있습니다 : 최종 사용자가 먼저, 프로그래머가 둘째입니다. 비즈니스 문제와 관련이 있습니다. 그리고 거의 모든 상황에서 플랩이 우리에게 도전 할 때 변화를 캡슐화합니다.
우리가 알고있는 단일 책임 원칙은 원래의 시대에서 남은 공룡이거나 우리가 이해의 대용품으로 사용하는 취미 말입니다. 멋진 소프트웨어를 만들려면 이러한 취미 말 몇 개를 남겨 두어야합니다. 그리고 그것은 상자 밖으로 생각해야합니다. 일을 간단하고 이해하기 쉽게 유지하는 것은 문제가 간단하고 이해하기 쉬운 경우에만 작동합니다. 나는 그 솔루션에별로 관심이 없다. 그것들은 전형적인 것이 아니며 도전이있는 곳이 아니다.