먼저, 나는 Edsger W. Dijkstra의 1974 년 논문 "과학적 사고의 역할에 관한"을 읽었습니다.
내가 당신에게 설명하려고 노력하겠습니다. 내 취향에 맞는 것은 모든 지적 사고의 특징입니다. 그것은 자신이 일관성을 유지하기 위해 자신의 주제의 측면을 심도있게 연구하고자하는 것이며, 항상 하나의 측면만으로 자신을 차지하고 있다는 것을 알고 있습니다. 우리는 프로그램이 정확해야한다는 것을 알고 있으며 그 관점에서만 연구 할 수 있습니다. 우리는 또한 그것이 효율적이어야한다는 것을 알고 있으며, 언젠가는 그 효율성을 연구 할 수 있습니다. 다른 분위기에서 우리는 스스로에게 물어볼 수 있으며, 그렇다면 : 왜, 프로그램이 바람직한 지 묻습니다. 그러나 이러한 다양한 측면을 동시에 다루면 아무것도 얻을 수 없습니다. 내가 때때로 "문제의 분리"라고 부르는 것인데, 비록 완벽하게 가능하지는 않지만 내가 아는 한, 생각의 효과적인 순서를 정할 수있는 유일한 기술이다. 이것이 내가 "어떤 측면에주의를 집중시키는"것의 의미입니다. 그것은 다른 측면을 무시하는 것을 의미하는 것이 아니라, 단지이 측면의 관점에서, 다른 측면은 관련이 없다는 사실에 대한 정의를 수행하는 것입니다. 한 트랙과 여러 트랙을 동시에 생각하고 있습니다.
코드의 모듈화에 대한 현대의 분리 문제에 대해 이야기합니다. 그러나 위의 인용문을 읽으면 한 번에 하나의 특정 작업에만 집중하고 다른 측면에는 초점을 맞추지 않는 것으로 이해합니다. 이것은 반드시 코드를 모듈 식 덩어리로 분리해야한다는 것을 의미하지는 않습니다.
즉, 하나의 파일에는보기, 저장소, 컨트롤러, 이벤트 처리, 팩토리 등의 개념이 모두 하나의 파일에 있다는 코드가 있다고 가정하십시오.
간단한 예를 들어, 데이터 액세스 및보기 (출력) 권한이있는 코드는 다음과 같습니다.
$sql = "SELECT * FROM product WHERE id = " . db_input($id);
$row = db_fetch_array(db_query($sql));
<option value="<?=$row['id']?>"<?= $row['ver'] == $row['ver'] ? ' selected="selected"' : '' ?>>Version <?=$row['ver']?></option>
최신 OO를 사용하면 리포지토리 패턴을 사용하여 자체 파일에 데이터 액세스를 배치 할 수 있으며 View 코드는 자체 파일 템플릿으로 이동할 수 있으며 컨트롤러 (또는 Action 또는 Request Handler)를 통해 통신하기 위해 이들을 함께 연결할 수 있습니다. 팩토리를 추가하여 다양한 종속성을 작성하고 연결하십시오. 그리고 그 팩토리를 정의하는 구성 파일을 가질 수 있습니다. 분명히 단일 파일에서 한 걸음 떨어져 있습니다.
우려 분리에 대한 나의 질문은 다음과 같습니다 : Dijkstra의 인용문을 읽으면, 그가 우려 분리를 "파일 또는 자체 기능 / 메소드 등으로 모듈 식 분리"하는 것이 아니라고 생각했을 수도 있습니다. 그는 코드에서 물리적으로 분리되어 있는지 여부에 관계없이 다른 중요하지만 현재 고려되지 않은 다른 측면에 중점을 두지 않고 프로그램의 측면에 마음을 집중시키는 것을 의미했습니다.
그렇다면 왜 우리는 물리적 모듈 식 코드 분리 및 디자인 패턴에 부담을 줍니까? 코드 구성 방식에 관계없이 한 측면에만 집중하는 것만으로는 충분하지 않습니까?
나는 가장 끔찍한 스파게티 코드를 작성하는 것에 대해 이야기하고 있지 않고 그 측면 만 고려한다면 그것은 부담이 될 것입니다. 그러나 결국, 내가 가고 싶은 것은, 물리적 코드 분리를 수행하는 이유, 정신적으로 한 측면에 집중할 필요가 없을 때 왜 코드를 분리 된 파일이나 청크로 (메서드)로 나눕니 까?
우려의 분리가 육체적 인 것이 아니라 정신적 인 운동으로 남아야합니까?
다시 말해서, 프로그래밍의 정신 (초점)과 물리적 (코드-종이) 측면 사이에 단절이 있어야 하는가?
IF
, WHILE
, FOR
대신 GOTO
. Modular = 잘 정의 된 퍼블릭 API를 가진 모듈은 숨겨진 내부 구현 및 표현과 엄격하게 분리됩니다. (예 : Modula, Mesa, Modula-2, Modula-3, 이후 파스칼 방언 ( UNIT
).)