2009-07-27 5 views
6

커뮤니티 위키는 논쟁의 여지가 있다고 생각할 수도 있고 다른 단어가 무엇을 의미하는지 생각할 수도 있으므로 커뮤니티 위키를 만들었습니다. 그들은 실제로 의미합니다 (다른 말로 의견의 문제인지 여부는 의견의 문제입니다).WF, WCF 및 선언적 서비스 (또는 : "선언적"이라는 의미는 무엇입니까?)

여기에는 general question on SO about declarative programming이 있습니다.

하지만 저는 Microsoft 전도사의 this blog post에 의해 다소 던졌습니다. 선언적 프로그램의

장점 중 하나는 여러분이 무엇을하고 싶은가 를 표시 할 수 있지만, 그렇게하지 않는 방법 입니다.

지금까지는 너무 좋아요. 실제로 SO 질문에 대한 대답과 정확히 일치합니다.

그러나 "서비스 구현"에 대한 부분, 당신은 그냥 XAML 코드의 수십 라인을보고 판단 할 수 있습니다

을 확인하는 방법 WCF 서비스를 구성하는 방법 해당 워크 플로가 정의됩니다.

몇 가지 예를 살펴본 결과 간단히 "아니, 할 수 없다"라는 대답으로 간단히 대답하겠습니다. 그러나이 물건들을 경솔하게 제거하지 말고, look at the docs이라고합시다.

잠깐이지만 마지막으로 reality has caught up with satire ...하지만 그게 중요한 것은 아닙니다. 물론 추가와 같이 사소한 것을 드러내는 것을 심각하게 제안하지는 않습니다. 나도 우스꽝 스러움에 대해 불평하지 않으며, 누군가가 직접 손으로 뭔가를 쓸 것이라는 이상한 생각은 인간이 읽을 수있는 언어보다는 컴파일러의 출력과 비슷합니다.

나를위한 퍼즐은 "선언적"이라고 주장합니다. 그리고 핵심은 할당 문입니다.

There's more here는 :

선언적 서비스 XAML 선언적 을 정의 추상화 계층을 제공한다. 기본적으로 서비스를 수행하는 방법 대신 서비스에서 원하는 서비스를 정의하여 서비스의 모델을 만듭니다. 작업의 구현을 포함하여 전체 서비스를 선언적으로 으로 정의 할 수 있습니다.

그래서 우리는 선언 만드는, 선언 또는 선언적으로 세 번을 말한다면. 잡았다. 그리고 만약 우리가 마술 문구 "당신이 그것을하고 싶은 것보다는하고 싶은 것"이라면, 우리는 다음 문장에서 "결국 운영의 구현"을 지정하게된다는 것을 무시할 수 있습니다. 그래서 우리는 그것을 정확하게하는 방법을 말할 것입니다.

해당 페이지의 예는 다음과 같습니다

:

말을하는 것입니다
<wma:Sequence> 
    <wma:WriteLine Text ='[String.Concat(String.Concat(String.Concat(String.Concat("Add(", CType(op1, Object)), ","), CType(op2, Object)), ") called")]' /> 
    <wma:Assign x:TypeArguments="xs:Int32" To="[result1]" Value="[op1 + op2]" /> 
</wma:Sequence> 

이 (필자는 WF 예에서 잘라 한 쓰레기의 톤 포함) 모든 일에 정확하게 동일합니다

void Add(int op1, int op2, out int result1) 
{ 
    Console.WriteLine("Add(" + op1 + ", " + op2 + ") called"); 
    result1 = op1 + op2; 
} 

그래서 문장의 블록은 나타나는 순서대로 실행되고 부작용이 있습니다. 물론 루핑을위한 워크 플로 활동 요소가 있습니다 (WF에 이미 필수 명령문이없는 경우 사용자 고유의 활동을 작성할 수 있습니다). 분명히 "코드를 읽을 수없는 형식으로 다시 작성"하는 것은 "추상화 계층 추가"와 같은 것입니다.

필자가 계속해서 불평하는 미친 읽을 수없는 자세한 내용은 아닙니다. 서비스 구현에서 Turing- 완벽한 명령형 프로그래밍이 일어나고 있다는 점은 무엇입니까? 그 사실을 알기 전에 디버거에서 워크 플로우를 단계별로 실행하고 어떤 할당 문이 어떤 값을 변형 시켰는지, 아니면 루프가 영원히 계속 돌아가는 이유를 파악하려고합니다.

(아이러니하게도 C# 버전에서는 조금 더 선언적입니다. 문자열 조각을 연결하는 방법을 지정하지 않았기 때문에 컴파일러에서 Concat 메서드를 호출하는 횟수를 줄일 수 있습니다.)

XML에 무엇인가를 쓰는 것이 선언적 (읽기 쉽지 않은 것처럼)이되도록합니까?

답변

3

교환 형식 이외의 용량에서 XML을 사용하면 큰 시간을 낭비한다는 또 다른 확인 사항이 있습니다.

WCF의 서비스 "정의"는 첫날부터 선언되었습니다. 그러나 서비스 정의에서 인터페이스 정의를 분리하면 (이 말은 ServiceContractAttribute 등을 의미 함), IMO, 좋습니다. 그러나 XML을 프로그래밍 언어로 사용하는 것은 정말 짜증납니다.

나는이 XML 문서를 볼 때 개인적으로 순수한 공포의 공격을 직접 느낄 수 있습니다.

0

Windows 워크 플로우 파운데이션의 일부는 Microsoft의 외부에서 논의되지 않았기 때문에 명확하게 설명되어 있습니다.

워크 플로 프로젝트를 만들고 도구 상자를 보면 설계 화면 위로 끌어 올 수있는 많은 "상자 및 선"이 표시됩니다. 이 도구 세트로 워크 플로우를 생성하려는 인상을받을 수 있습니다. 그건 사실이 아니야.

문제 도메인과 관련된 사용자 지정 활동을 작성해야합니다. 이것들은 다양한 박스 외부 활동에 의해 연결되도록되어 있습니다. 이들은 "보험 정책 평가"또는 "환자 체류 기록"과 같은 상당히 고차원적인 활동이 될 것입니다.

선언 워크 플로 (또는 서비스)는 사용 가능한 문제 별 활동을 함께 표시하는 방법을 선언합니다.

+0

"함께 쓰는 방법을 선언합니다."- 그러나 C#의 메서드 본문은 메서드를 구현하는 방법을 "선언"합니다. 그리고 선언적 프로그래밍이 피할 수있는 단어 인 "how"의 모양을 주목하십시오. 서비스에 의해 수행되는 워크 플로우 활동은 일반적으로 필수 단계 (chunky)이므로 명령형 순서로 작동해야하며 즉시 사용 가능한 WF 활동이 필요하다는 점을 감안할 때 선언적과 필수적 사이의 경계는 무엇입니까 ? –

관련 문제