2009-07-27 17 views
6

いくつかは、それが議論し、他の人にオープンだと思うかもしれないので、私はこのコミュニティのWikiを作ったが、それが何を意味する単語を使用しての質問だと思うかもしれません彼らは本当に意味する(言い換えれば、意見の問題かどうかは意見の問題です)。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で宣言 を定義し、抽象化の 別の層を提供しています。 基本的に、あなたは サービスがそれを を行う方法ではなく、何をしたいのか定義することによって、 サービスのモデルを作成します。オペレーションの 実装を含め、サービス全体を宣言的に と定義することができます。

だから我々はそれが、宣言作ること、宣言型または宣言 3回を言う場合。ゴッチャ。そして、もしあなたが "それをやるよりむしろ何をしたいか"という魔法の言葉を言えば、次の文では結局 "オペレーションの実装"を指定することに気付かないかもしれません。どのようにそれを行うかを正確に言うだろう。

そのページの例は以下のとおりです。

言うことです
<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があなたの好きな命令文をまだ持っていない場合は独自のアクティビティを書くことができます)。明らかに、「コードを読めない形式で書き直す」ことは、「抽象レイヤーを追加する」と同じことです。

私が不満を言い聞かせているのは、非常にわかりにくい冗長ではありません。サービス実装で起こっているのは明らかにチューリング完全命令型プログラミングです。その点は何ですか?それを知る前に、デバッガのワークフローを踏んで、どの代入文がどの値を変更したのか、あるいはループが永遠に続くのかを把握しようとします。

(ちなみに、C#バージョンでは、文字列を連結する方法を指定していないため、コンパイラはConcatメソッドへの呼び出しをより少なく生成できるため、少し宣言的です)。

XMLで何かを書くことで、宣言的(読みにくくなるだけでなく)になりますか?

答えて

3

また、交換フォーマット以外の容量でXMLを使用すると、大きな時間がかかります。

WCFのサービス "定義"は、第1日以降に宣言されています。しかし、インタフェース定義をサービス定義から分離すること(これは私がServiceContractAttributeなどを意味する)は、IMO、良いことです。しかし、プログラミング言語としてXMLを使用するのは本当にうんざりです。

これらのXML文書を見ると、私は個人的に純粋な恐怖の説明をすることができます。

0

Windowsワークフローファウンデーションにはあまり説明されていない部分がありますが(Microsoft以外では)、これが明確になる場合があります。

ワークフロープロジェクトを作成してツールボックスを見ると、デザイン面にドラッグできる多数の「ボックスとライン」が表示されます。このツールセットからワークフローを作成するという印象を受けるかもしれません。そうではありません。

問題のドメインに固有のカスタムアクティビティを作成する必要があります。これらは、さまざまなボックス外活動によって結ばれることを意図しています。これらは、「保険契約の評価」や「患者の滞在の記録」のようなかなり高レベルな活動である可能性が高いです。

宣言的なワークフロー(またはサービス)は、利用可能な問題固有のアクティビティをどのように組み立てるかを宣言します。

+0

"どのようにまとめるか" - ただし、C#のメソッド本体がメソッドの実装方法を "宣言"するという意味でのみです。そして、宣言的プログラミングが避けようとしている "how"という言葉の出現に注意してください。サービスによって実行されるワークフローアクティビティは通常は必須のステップ(チャンク)であり、命令的な順序で操作し、即時にすぐに使用できるWFアクティビティによって接着されるため、宣言型と命令型の間の線は何ですか? –

関連する問題