いくつかは、それが議論し、他の人にオープンだと思うかもしれないので、私はこのコミュニティの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ですが、それはポイントではありません。もちろん、追加のような些細なことを明らかにするためにこれを行うことを真剣に提案しているわけではありません。私は、ばかげた冗長さや誰かが手でこれを書くような奇妙なアイデアについては不平を言っていません。人間が読める言語よりもコンパイラの出力に似ています。
私のパズルは、これが「宣言的」であると主張されているということです。それでも、その中核は代入文です。
宣言のサービスは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で何かを書くことで、宣言的(読みにくくなるだけでなく)になりますか?
"どのようにまとめるか" - ただし、C#のメソッド本体がメソッドの実装方法を "宣言"するという意味でのみです。そして、宣言的プログラミングが避けようとしている "how"という言葉の出現に注意してください。サービスによって実行されるワークフローアクティビティは通常は必須のステップ(チャンク)であり、命令的な順序で操作し、即時にすぐに使用できるWFアクティビティによって接着されるため、宣言型と命令型の間の線は何ですか? –