SOLID를 따를 때 파일을 읽고 쓰는 데 별도의 책임이 있습니까?


13

방금 SOLID를 탐색하기 시작했으며 파일에서 읽고 파일에 쓰는 것이 동일한 책임인지 확실하지 않습니다.

대상은 동일한 파일 형식입니다. 신청서에 .pdf를 읽고 쓰고 싶습니다.

차이가 있다면 응용 프로그램은 Python입니다.

답변:


24

읽기 및 쓰기 구현은 응집력이 높을 가능성이 높습니다. 하나가 바뀌면 다른 하나도 바뀔 것입니다. 높은 응집력은 단일 책임을 강력하게 나타내며 단일 책임 원칙은 이들이 동일한 등급으로 구성되어야 함을 알려줍니다. 이러한 작업의 응집력이 낮 으면이를 분할하면 유지 관리 성이 향상 될 수 있습니다.

그러나 쓰기없이 데이터를 읽거나 읽지 않고 쓰는 소비자가있는 경우 인터페이스 분리 원칙에서 규정 한대로 인터페이스 관점에서 이러한 작업을 분리해야 함을 나타냅니다. 이는 소비자가 의존 할 수있는 두 개의 인터페이스를 정의해야하며 File클래스는 두 인터페이스를 모두 구현 한다는 것을 의미합니다 .


8

SOLID 원리를 적용하여 객체를 설계 할 때 파일 읽기 및 쓰기를 하나의 책임으로 간주 할 수 있습니다. 영구 데이터 작업

그러나 파일 읽기 및 쓰기를 동일한 방법이나 기능으로 사용해서는 안됩니다.


5

다른 답변의 대부분은 귀하의 질문에 하나의 중요한 정보가 누락되었다고 간과 한 것 같습니다-읽고 쓰는 문서가 관련되어 있는지 여부와 방법을 알려주지 않았습니다!

응용 프로그램에 "문서 객체"와 같은 것이 있고이를 먼저 PDF 파일에 쓴 다음 나중에 동일한 파일을 유사한 문서 객체로 다시 읽습니까? 또는 반대로 PDF를 문서로 읽어서 수정하고 동일한 문서를 새 PDF에 다시 저장합니까? 그러면 읽고 쓰는 것이 하나의 책임으로 여겨 져야합니다. 응용 프로그램이 "PDF 편집기"구성 요소 또는 "PDF 조작 툴킷"과 같은 것이거나 포함 된 경우가 여기에 해당합니다.

그러나 응용 프로그램의 한 부분이 예를 들어보고 구성 요소에서 일부 PDF 파일을 작성하고 응용 프로그램의 관련되지 않은 다른 부분이 다른 PDF (예 : 검색 엔진의 메일 첨부 파일 평가 기)와 후자의 PDF는 첫 번째 사용 사례와 공통점이 없으며 해당 작업은 다른 책임입니다.

특히 PDF의 경우 두 번째 사용 사례는 다른 종류의 응용 프로그램에서 훨씬 더 많이 본 사례입니다. PDF 작성을 지원하는 훨씬 더 많은 라이브러리 / 구성 요소가 있으며 PDF 읽기도 지원하는 훨씬 적은 수의 라이브러리가 있습니다. PDF 파일을 생성하기 위해 하나의 라이브러리를 사용하고 PDF를 읽기 위해 완전히 다른 라이브러리를 사용하려는 경우 PDF 읽기와 쓰기는 별도의 책임이 있음을 알아야합니다.


이것은 Steven의 대답과 비슷하지만 구체적인 예를 제공합니다.
DavidS

@DavidS : Steven의 대답은 매우 추상적이지만 OP가 PDF 파일을 구체적으로 요구했기 때문에 더 구체적인 방식으로 대답하는 것이 합리적이라고 생각합니다. 그리고 PDF의 경우 Steven의 첫 문장에 동의하지 않습니다. "읽기 및 쓰기 구현은 응집력이 높을 가능성이 높습니다" – 필자의 경험에 따르면 일반적인 PDF 사용 사례의 경우 그 반대도 마찬가지입니다.
Doc Brown

구체적인 예가 우수합니다. 방금 분석을 위해 비교하고있었습니다. 좋은 대답입니다!
DavidS

3

( Robert C. Martin ) 에 따르면 책임은 특정 행위자에게 서비스를 제공하는 일련의 기능입니다.

행위자는 주어진 책임의 유일한 변화의 원천이되어야합니다 (변화해야 할 이유가 하나만 있어야합니다).

귀하의 경우 먼저 액터를 첫 번째 단계로 정의한 다음 질문을해야합니다. 파일을 읽고 다른 것만 써서 관심이있는 배우가 있습니까?

이 경우 파일 읽기 및 쓰기는 두 가지 별도의 책임입니다. 여러 변경 소스가 있기 때문에 (많은 배우가 읽기 논리와 쓰기를 위해 같은 것을 변경하도록 요청할 수 있습니다).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.