2017-10-24 8 views
0

대부분의 기존 웹 프레임 워크는 마크 업에 템플릿 패러다임을 사용합니다. 대부분 HTML과 비슷하지만, 컨트롤 플로우를 관리 할 때 프레임 워크가 훅하는 커스텀 HTML 애트리뷰트, 동적 컨텐트의 플레이스 홀더 구문 등등과 같은 모든 종류의 DSL 애드온이있다. 여기마크 업을위한 함수 기반 패러다임에 템플리트 기반 패러다임을 선호하는 객관적인 이유가 있습니까?

인기있는 템플릿의 예는 접근 방법은 다음과 같습니다

Django templates :

{% extends "base_generic.html" %} 

{% block title %}{{ section.title }}{% endblock %} 

{% block content %} 
<h1>{{ section.title }}</h1> 

{% for story in story_list %} 
<h2> 
    <a href="{{ story.get_absolute_url }}"> 
    {{ story.headline|upper }} 
    </a> 
</h2> 
<p>{{ story.tease|truncatewords:"100" }}</p> 
{% endfor %} 
{% endblock %} 

Vue templates :

<div v-bind:id="dynamicId"> 
    <!--This markup will be the template of the root instance--> 
    <h1 v-if="seen">My Vue.js App</h1> 
    <p> {{ message.split('').reverse().join('') }}</p> 
    <NonStandardMarkupIsFineHere/> 
</div> 

Angular templates :

<button (click)="onSave($event)">Save</button> 
<button *ngFor="let hero of heroes" (click)="deleteHero(hero)"> 
    {{hero.name}} 
</button> 
<form #heroForm (ngSubmit)="onSubmit(heroForm)"> ... </form> 

대조적으로, React, Cycle 또는 Elm 아키텍처와 같은 프레임 워크는 기능 기반 패러다임을 사용합니다. DOM 또는 중간 가상 DOM을 직접 업데이트하는 함수를 호출합니다.

Cycle.js :

다음은 몇 가지 예입니다 프레임 워크 사이에 선택할 때,이 종종 결정 요인이다

const Button = props => { 
    const { kind, ...other } = props; 
    const className = kind === "primary" ? "PrimaryButton" : "SecondaryButton"; 
    return <button className={className} {...other} />; 
}; 

const App =() => { 
    return (
    <div> 
     <Button kind="primary" onClick={() => console.log("clicked!")}> 
     Hello World! 
     </Button> 
    </div> 
); 
}; 

React.js:

const sinks = { 
    DOM: sources.DOM.select('input').events('click') 
     .map(ev => ev.target.checked) 
     .startWith(false) 
     .map(toggled => 
     div([ 
      input({attrs: {type: 'checkbox'}}), 'Toggle me', 
      p(toggled ? 'ON' : 'off') 
     ]) 
    ) 
    } 
.

내 질문은 : 다른 것을 선호하는 객관적인 이유가 있습니까? 아니면이 차이가 단순한 주관적인 선호도에 해당합니까? 템플릿 기반 시스템에 더 적합한 일반적인 유스 케이스가 있습니까? 기능 기반 시스템보다 작성하거나 추론하기가 실질적으로 더 어려울까요?

예를 들어 템플릿 시스템이 "단순한 HTML"이므로 템플릿이 더 간단하고 익숙하다는 것입니다. 그러나 이것은 사실이 아닙니다. 그것들은 단지 HTML이 아니며, 매번 차례대로 DSL 개념으로 HTML을 확장합니다. 마크 업은 논리로 가득 차고 문자열 및 기타 비 -HTML 구문으로 만 작성됩니다. 또한 많은 함수 기반 패러다임은 JSX와 같은 구문 설탕을 제공하여 대부분의 템플릿 언어와 비슷한 모양을 HTML에 가깝게 만듭니다.

답변

0

아이디어는 결과 출력에 템플릿 시스템이 가까울수록 "템플릿"이 더 많으며 응용 프로그램이 아니라는 것입니다. 아주 정의에 의한 템플릿은 완성 된 제품을 최대한 닮았습니다. 이를 통해 사람들은 자신이 작성한 코드와 결과 HTML 사이의인지 적 교량 (cognitive bridge)을 달성 할 수 있습니다.

이 간격이 멀수록 결과 HTML을 이해하는 데 더 추상적 인인지 적 사고가 필요합니다. 이것은 일부에게는 쉽고 다른 사람들에게는 더 어려울 수도 있지만 여전히 할인되지 않아야하는 인식로드입니다.

저수준 언어 대신 고급 언어를 사용하는 것과 같은 이유입니다. 소프트웨어 개발자의인지 적 부담을 줄여 응용 프로그램의 목표를 달성하는 데 주력 할 수 있습니다.