아키텍처 설명 문서가 DRY 원칙을 위반합니까?


11

DRY 원리 (자신을 반복하지 말 것) 는 "모든 지식은 시스템 내에서 하나의 명백하고 권위있는 표현을 가져야한다"고 말합니다. 대부분의 경우 이것은 코드를 의미하지만 종종 설명서로 확장되기도합니다.

모든 소프트웨어 시스템은 선택 여부에 상관없이 아키텍처를 가지고 있다고합니다. 다시 말해, 구축 한 소프트웨어에는 구조가 있으며 "구축 된"구조는 소프트웨어의 아키텍처입니다. 빌드 된 소프트웨어 시스템에는 아키텍처가 제공되므로 해당 시스템의 아키텍처 설명을 작성하여 DRY 원칙을 위반합니까? 결국, 아키텍처를 알아야한다면 항상 코드를 볼 수 있습니다 ...


실제로 코드를보고 아키텍처를 식별 할 수 있다고 생각하십니까? 이 코드는 모든 기능적 및 비 기능적 요구 사항, 아키텍처 상충 관계, 배포 문제, 비즈니스 상황, 사용 사례 시나리오 등을 알려줍니다. 코드가 진실로 당신에게 말할 수 있다면, 그것은 사소한 시스템의 지옥 중 하나입니다.
luis.espinal

@ luis.espinal, 코드와 실행 시스템에서 각각 정적 및 동적 구조를 식별 할 수 있습니다. 이러한 구조가 시스템 아키텍처와 동일한 지 여부는 생각의 학교에 따라 다릅니다. 당신이 지적했듯이, 당신은 여전히 ​​모든 아키텍처 드라이버와 디자인 결정에 대한 근거를 포함한 큰 덩어리가 빠져있을 것입니다.
Michael

어떤 진정한 사고 학교가 코드 파생 구조를 시스템 아키텍처와 동일시합니까? 아키텍처 드라이버를 포함하여 큰 덩어리를 놓치면 전체 아키텍처가 누락됩니다. 이것은 코드만으로 식별 할 수있는 정적 및 동적 구조가 아키텍처 전체를 대표하지는 않는다는 것을 명백히 증명합니다 (사고와 상관없이). INCOSE)는 코드가 아키텍처의 일부에 불과하다는 점에서 분명합니다.
luis.espinal

지목 사항. 시스템 아키텍처를 사용하려면 특정 순서에 따라 외부 인터페이스를 끄고 켜는 특정 머신 수에 배포해야 할 수 있습니다. 코드만으로 파생 된 정적 및 동적 구조는이를 거의 포착하지 못할 것입니다. 그러나 이러한 구조는 시스템 아키텍처의 배포 및 운영 측면의 일부입니다. 코드 파생 구조는 소프트웨어 응용 프로그램 (또는 구성 요소) 아키텍처 의 정적 측면 구현에만 관련됩니다 . 시스템 아키텍처 에는 사용할 수 없습니다 .
luis.espinal

1
@ luis.espinal, 나는이 질문에 대한 답변을 제출하도록 초대합니다! 이 주제에 실질적인 가치를 더할 것이라고 생각하는 훌륭한 관점을 가지고있는 것 같습니다. 당신은 이것에 대해 성가대에 설교하고 있습니다, 그래서 당신의 생각을 충분히 설명하여 모두가 혜택을 얻을 수있는 답을 만드십시오. 내가 처음에 질문을 한 이유입니다.
Michael

답변:


11

생각을 코드에 복제하는 것은 DRY 원칙을 위반합니까?

Geez, 코드를 조사하여 아키텍처를 알 수 있다면 "아키텍처 설명 문서"와 같은 것은 처음에는 없습니다. 그것은 회개가 아니며, 시스템 수준또 다른 수준이며 , 코드에서 사소하게 추론 할 수 없으며 그 반대도 마찬가지입니다. 따라서 DRY를 받아들이더라도 존재하는 모든 권리가 있습니다.


7

DRY를 단단하고 빠른 규칙으로 사용하지 마십시오. 좋은 일이지만 실제로는 대략적으로 만 근사 할 수 있습니다.

또한 나는 그것이 잘 쓰여지지 않았다고 생각합니다. "반복하지 마십시오"는 의미 적 또는 기능적 변경을하기 위해 소스 텍스트를 여러 곳에서 편집해야하지만 서로 다른 조정 된 내용을 말해야하는 중요한 경우를 다루지 않습니다.

위반하지 않는 계명으로 받아들이 기보다는 왜 그것이 좋은 생각인지 이해하고 그것에 대해 현명한 선택을하는 것이 좋습니다. 여러 곳에서 공동 편집을해야하는 것은 편집자가 실수를 저지르기 때문입니다. 오류없이 변경을 수행하는 데 100 % 신뢰할 수 없습니다. 10 개의 다른 소스 텍스트를 변경해야하고 그 중 9 개만 올바르게 수정 했다면 버그가있는 것 입니다. 따라서 조정 된 변경 횟수를 최소화하기 위해 소스 텍스트를 정렬하는 것이 좋습니다. 버그를 최소화합니다.

우리는 DRY가 계명 ​​중 하나 인 종교에 속하지 않습니다. 약간의 오해의 소지가 있지만 일부 상식을 캡슐화하는 편리한 방법입니다.


4

아키텍처 설명 또는 소프트웨어 디자인 설명 DRY를 위반합니다. 그러나 지난 몇 년간 프로젝트가 진행되고 개발자가 왔다가 나가는 대규모 조직에서는 한 사람이 모든 세부 사항을 머리에 담기에는 시스템이 너무 커서 중요한 문서입니다. 동기화를 유지하는 데 필요한 "반복"의 양은 다음 업데이트 또는 유지 관리 중에 절약 할 수있는 가치가 있습니다.


1
DRY의 오해 또는 맹목적인 적용입니다. 아키텍처 설명은이를 위반하지 않습니다. 만약 이런 식으로 DRY를 맹목적으로 적용한다면, 코드 이외의 다른 것은 그것을 위반하는 것입니다.
luis.espinal

2

아키텍처 설명은 DRY 원칙을 위반하지 않습니다.

소프트웨어 시스템에는 아키텍처가 제공됩니다. 또한 많은 클래스에 걸쳐 많은 파일에 걸쳐 있으며 개요에 필요하지 않은 많은 외부 및 세부 사항이 있습니다.

아키텍처 문서는 뉴스 보고서의 첫 번째 단락과 같아야합니다. 개요, 요약, 프로젝트 로드맵입니다.


1

문서에 날짜를 기입하면 문서 작성 당시의 아키텍처에 대해 설명합니다.

코드는 현재 아키텍처를 나타냅니다.

두 가지 별개의 것-같은 지식이 아닙니다.

문서 작성 시점에서 문서가 아키텍트를 나타내는 것으로 기술되어 있다면, 다른 시점의 시스템에 대한 지식이 다르기 때문에 지식 IMO를 복제하지 않습니다.


코드는 결코 아키텍처를 나타내지 않습니다. 그것은 단지 아키텍처의 표현 일뿐입니다. 오늘 변경된 코드는 여전히 어제의 아키텍처를 나타낼 수 있습니다. 또한 의도 한 (또는 계약 적으로 필요한) 아키텍처를 나타내지 않을 수도 있습니다. 이는 가장 걱정해야 할 사항입니다. 코드는 그것이 옳고 그른지를 알려주지 않고 실행 만합니다. 그것이 옳은지 아닌지를 알기 위해서는 시스템을 시작 하도록 의도 한 아키텍처와 요구 사항 을 살펴 봐야 합니다.
luis.espinal
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.