문제

나는 지금 이 프로젝트에 대한 견해가 장점이 없다고 생각하는 다른 프로그래머와 논쟁에 휩싸인 것 같습니다.그는 PHP가 다음과 같은 시스템을 제안합니다.

$draw = new Draw;
$nav = $draw->wideHeaderBox().
$draw->left().
    $draw->image().
        Image::get($image,60,array('id'=>'header_image')).
    $draw->imageEnd().
$draw->leftEnd().
$draw->left(10).
    '<div id="header_text">'.
        self::defaultSectionText().
    '</div>'.
$draw->leftEnd().

등등 (이것은 컨트롤러 btw에 있습니다).이제 이것에 대한 그의 주장은 실제로 어느 정도 의미가 있습니다. 그는 재설계가 있는 경우 우리가 해야 할 일은 HTML을 한 곳에서 변경하는 것 뿐이며 모든 곳에서 자동으로 변경된다고 주장합니다.그러나 어떤 이유에서인지 이 방법은 여전히 ​​​​나를 잘못된 길로 인도합니다. 이 방법에 대한 견해에 장점이 있습니까?HTML을 직접 다시 입력할 필요가 없다는 뜻입니다.

도움이 되었습니까?

해결책

HTML 시간 절약 기능은 유용하지만 직관적이고 이해하기 쉬운 경우에만 유용합니다.인스턴스화해야 함 new Draw 별로 자연스럽지 않은 것 같아요.뿐만 아니라, wideHeaderBox 그리고 left 시스템을 잘 아는 사람에게만 의미가 있을 것입니다.그리고 만약 거기에 있다면? ~이다 동료의 뮤즈처럼 재설계를 하시겠습니까?만약에 wideHeaderBox 많이 좁아지나요?PHP 메소드에 의해 생성된 마크업(및 추정 가능한 스타일)을 변경하지만 코드를 호출하기 위해 매우 부정확한 메소드 이름을 남겨두시겠습니까?

여러분이라면 그냥 가지다 HTML 생성을 사용하려면 뷰 파일에 산재해서 사용해야 하며 다음과 같이 정말 필요하거나 유용한 곳에 사용해야 합니다.

HTML::link("Wikipedia", "http://en.wikipedia.org");
HTML::bulleted_list(array(
    HTML::list_item("Dogs"),
    HTML::list_item("Cats"),
    HTML::list_item("Armadillos")
));

위의 예에서 메소드 이름은 실제로 시스템에 익숙하지 않은 사람들에게도 의미가 있습니다.또한 자주 방문하지 않는 파일로 돌아가서 도대체 무엇을 하고 있었는지 궁금해할 때에도 더 이해가 될 것입니다.

다른 팁

그가 사용하는 논증은 당신이해야 할 논증입니다 가지다 견해.둘 다 한 곳에서만 변경됩니다.그러나 그의 버전에서는 뷰 마크업과 비즈니스 코드를 혼합하고 있습니다.

템플릿 디자인을 더 많이 사용하는 것이 좋습니다.모든 비즈니스 로직을 PHP에서 수행하고 페이지에 필요한 모든 변수를 설정하십시오.그런 다음 페이지 마크업이 해당 변수를 참조하게 하고 비즈니스 로직을 전혀 처리하지 않게 합니다.

스마티 보셨나요? http://smarty.php.net

나는 과거에 그런 일을 해본 적이 있는데 그것은 시간 낭비였습니다.예를 들어 기본적으로 HTML로 할 수 있는 모든 것에 대한 래퍼를 작성해야 하며 몇 가지 사항을 잊어버리게 됩니다.레이아웃에서 뭔가를 변경해야 할 때 "아, 그거 잊어버렸네..이제 다른 메서드를 코딩하거나 다른 매개변수를 추가해야 해"라고 생각할 것입니다.

궁극적으로, 지금부터 몇 달 후에는 아무도 사용법을 모르거나 기억하지 못할 HTML을 생성하는 거대한 함수/클래스 컬렉션을 갖게 될 것입니다.새로운 개발자는 무엇이든 변경하기 전에 시스템을 배워야 하기 때문에 이 시스템을 사용하는 것에 대해 당신을 저주할 것입니다.대조적으로, 아마도 추상적인 HTML 그리기 수업보다 HTML을 아는 사람들이 더 많을 것입니다. 때로는 순수한 HTML을 직접 다루어야 할 때도 있습니다.

솔직히 말해서 꽤 장황하고 따라가기 어려워 보이며 일부 코드는 매우 레이아웃 정보처럼 보입니다.

우리는 항상 출력에서 ​​로직을 최대한 분리하려고 노력합니다.그러나 보기와 데이터가 두 부분과 매우 밀접하게 연결되어 다른 부분이 어떻게 되어야 하는지를 지시하는 경우가 많습니다(예: 간단한 전자 상거래 사이트에서는 각 제품 옆에 재고 수준을 표시하기로 결정할 수 있습니다). , 여기에는 적절한 HTML을 추가하기 위해 뷰를 변경하고 주식 가치를 파악하기 위한 비즈니스 로직이 분명히 포함됩니다.

2개의 파일을 유지 관리하는 것이 너무 부담스럽다면 "데이터 수집" 부분과 "표시 보기" 부분으로 나누어서 관리해야 하는 파일 수를 늘리지 않고도 대부분의 이점을 얻을 수 있습니다. .

나는 항상 html로 직접 작업하는 것이 훨씬 쉽다고 생각합니다.처리해야 할 추상화 계층이 하나 적습니다(html -> 실제 웹페이지 / php 함수 -> html -> 실제 웹페이지). 그런 다음 HTML로 작업하면 됩니다.

나는 정말로 이 경우에는 '한 곳에서 변경해야 한다'는 것이 작동하지 않을 것이라고 생각합니다.함수의 출력을 변경하려는 경우가 너무 많지만 한 곳에서만 가능하기 때문입니다.물론 인수를 사용할 수 있지만 곧 12개 정도의 인수를 포함하는 일부 함수를 갖게 될 것입니다.왝.

템플릿 언어/시스템에서는 종종 하위 템플릿을 포함할 수 있으므로 재사용 가능한 HTML 블록을 가질 수 있다는 점을 명심하세요.

요점은 제가 막 귀하의 회사에 입사하여 어디에서나 그런 코드를 본다면, 제가 가장 먼저 생각한 것은 '젠장!다시 새로운 직업이 필요해요.'

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top