gpt4 book ai didi

wcf - WF、WCF 和声明式服务(或 : What does Microsoft mean by "declarative"?)

转载 作者:行者123 更新时间:2023-12-04 15:38:02 25 4
gpt4 key购买 nike

我制作了这个社区 Wiki,因为有些人可能认为它可以进行辩论,而另一些人可能认为这是一个用词来表达他们真正意思的问题(换句话说,这是一个意见问题)。

有一个 general question on SO about declarative programming ,它有一些很好的答案。

但我有点被微软传教士的 this blog post 所迷惑。

One advantage of declarative programming is that you can indicate what you would like to do, but not how to do it.



到目前为止,一切都很好 - 事实上,这与 SO 问题的公认答案完全一致。

但是然后查看有关“服务实现”的部分,

You can just look at a few dozen lines of xaml code and be able to determine how the WCF Service is configured and how the corresponding workflow is defined.



看过一些例子后,让我简要回答一下“不,我不能”。但与其轻率地忽略这些东西,不如让我们 look at the docs

花了一段时间,但终于 reality has caught up with satire ...但这不是重点 - 当然,他们并没有认真建议这样做来暴露一些微不足道的东西,比如加法。我也不是在提示荒谬的冗长,以及任何人都会用手编写类似的东西的奇怪想法——它看起来更像是编译器的输出,而不是人类可读的语言。

令我困惑的是,这据称是“声明性的”。然而,它的核心是一个赋值语句。

There's more here:

Declarative services are defined declaratively in XAML and provide another layer of abstraction. Basically, you create a model of the service by defining what you want the service to do rather than how to do it. The entire service can be defined declaratively, including the implementation of the operations.



因此,如果我们说三遍声明性或声明性,那就是声明性的。明白了。如果我们说“你想做什么而不是怎么做”这个神奇的短语,那么我们可以忽略在下一句中,我们将指定“操作的实现”,所以我们将准确地说出如何做到这一点。

该页面中的示例是:
<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;
}

所以 - 一个语句 block ,按照它们出现的顺序执行,并且有副作用。当然还有用于循环的工作流事件元素(如果 WF 还没有你最喜欢的命令式语句,你可以编写自己的事件)。显然,“以不可读的格式重写代码”与“添加抽象层”是一回事。

重申一下,我提示的不是疯狂的难以理解的冗长——事实上,它显然是在服务实现中发生的图灵完备的命令式编程,那么有什么意义呢?在你知道之前,我们将在调试器中逐步完成我们的工作流程,试图找出哪个赋值语句改变了哪个值,或者为什么循环会永远循环下去。

(具有讽刺意味的是,在 C# 版本中,它更具声明性,因为我们没有指定应如何连接字符串片段,从而允许编译器生成对 Concat 方法的更少调用。)

那么在 XML 中编写某些东西是否会使其具有声明性(以及可读性较差)?

最佳答案

另一个承认在交换格式以外的其他能力中使用 XML 很浪费时间。

WCF 中的服务“定义”从一开始就是声明性的。但是,将接口(interface)定义与服务定义分开(我的意思是 ServiceContractAttribute 等)在 IMO 中是件好事。然而,使用 XML 作为编程语言真的很糟糕。

在查看这些 XML 文档时,我个人觉得纯粹的恐怖攻击是可以解释的。

关于wcf - WF、WCF 和声明式服务(或 : What does Microsoft mean by "declarative"?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1187713/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com