Tôi đã thực hiện Cộng đồng Wiki này vì một số người có thể nghĩ rằng nó đang mở để tranh luận và những người khác có thể nghĩ đó là câu hỏi họ thực sự có ý nghĩa (nói cách khác, đó là vấn đề ý kiến cho dù đó là vấn đề của ý kiến).WF, WCF và dịch vụ khai báo (hoặc: Microsoft có ý nghĩa gì bởi "tuyên bố"?)
Có một số general question on SO about declarative programming, có một số câu trả lời tuyệt vời.
Nhưng tôi bị một chút ném bởi this blog post từ một nhà truyền giáo của Microsoft.
Một ưu điểm của declarative lập trình là bạn có thể chỉ ra những gì bạn muốn làm, nhưng không phải là cách để làm điều đó.
Cho đến nay, rất tốt - điều đó hoàn toàn đồng ý với câu trả lời được chấp nhận về câu hỏi SO, trên thực tế.
Nhưng sau đó kiểm tra phần về "thực hiện dịch vụ",
Bạn có thể chỉ cần nhìn vào một vài chục dòng XAML mã và có thể để xác định như thế nào Dịch vụ WCF được cấu hình và làm thế nào quy trình công việc tương ứng được xác định.
Đã xem xét một số ví dụ, hãy để tôi trả lời ngắn gọn bằng cách nói "Không, tôi không thể". Nhưng thay vì gạt bỏ những thứ này một cách khéo léo, hãy look at the docs.
Mất một lúc nhưng cuối cùng là reality has caught up with satire ... nhưng đó không phải là vấn đề - tất nhiên họ không nghiêm túc đề xuất làm điều này để phơi bày điều gì đó tầm thường như bổ sung. Tôi cũng không phàn nàn về sự rống rợn vô lý, và ý tưởng kỳ lạ là bất cứ ai cũng có thể viết cái gì đó như thế bằng tay - nó trông giống như đầu ra của một trình biên dịch hơn là một ngôn ngữ có thể đọc được.
Câu đố cho tôi là điều này được xác nhận là "khai báo". Và cốt lõi của nó là một tuyên bố phân công.
dịch vụ khai báo được định nghĩa khai báo trong XAML và cung cấp một lớp trừu tượng. Về cơ bản, bạn tạo một mô hình của dịch vụ bằng cách xác định những gì bạn muốn dịch vụ để làm thay vì cách thực hiện . Toàn bộ dịch vụ có thể được xác định theo cách khai báo, bao gồm việc thực hiện các hoạt động .
Vì vậy, nếu chúng ta nói declarative hoặc khai báo ba lần, mà làm cho nó khai báo. Gotcha. Và nếu chúng ta nói cụm từ ma thuật "những gì bạn muốn làm hơn là làm thế nào" thì chúng ta có thể bỏ qua để nhận thấy rằng trong câu tiếp theo, chúng ta sẽ chỉ định "thực hiện các hoạt động", và vì vậy chúng tôi sẽ nói chính xác cách thực hiện.
Ví dụ trong trang đó là:
<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>
Đó là để nói, toàn bộ điều (trong đó có một tấn rác tôi đã cắt ra từ ví dụ WF) là chính xác tương đương với:
void Add(int op1, int op2, out int result1)
{
Console.WriteLine("Add(" + op1 + ", " + op2 + ") called");
result1 = op1 + op2;
}
Vì vậy - một khối câu lệnh sẽ được thực hiện theo thứ tự chúng xuất hiện và có các tác dụng phụ. Có tất nhiên các yếu tố hoạt động dòng công việc cho vòng lặp (và bạn có thể viết các hoạt động của riêng bạn nếu WF không có tuyên bố bắt buộc yêu thích của bạn). Rõ ràng, "viết lại mã của bạn ở định dạng không đọc được" cũng giống như "thêm một lớp trừu tượng".
Để nhắc lại, nó không phải là sự tức giận không thể đọc được Tôi đang phàn nàn về - đó là thực tế là rõ ràng là Turing-hoàn thành lập trình bắt buộc xảy ra trong việc thực hiện dịch vụ, vậy điểm là gì? Trước khi bạn biết nó, chúng ta sẽ bước qua các luồng công việc của chúng ta trong trình gỡ lỗi, cố gắng tìm ra câu lệnh gán nào đã đột biến giá trị nào, hoặc tại sao vòng lặp tiếp tục đi vòng mãi mãi.
(Sự trớ trêu là trong phiên bản C#, vì chúng tôi chưa chỉ định cách ghép các đoạn chuỗi, do đó cho phép trình biên dịch tạo ít cuộc gọi hơn đến phương thức Concat
.)
Vì vậy, viết một cái gì đó trong XML làm cho nó khai báo (cũng như ít có thể đọc được)?
"tuyên bố cách đặt cùng nhau" - nhưng chỉ theo nghĩa là phần thân phương thức trong C# "khai báo" cách triển khai phương thức. Và lưu ý sự xuất hiện của từ "làm thế nào", đó là những gì lập trình khai báo có nghĩa vụ phải tránh. Đường ranh giới giữa khai báo và mệnh lệnh là gì, vì các hoạt động dòng công việc được thực hiện bởi một dịch vụ thường là các bước bắt buộc (tuy nhiên chunky) và do đó phải hoạt động theo trình tự bắt buộc, và được bắt buộc bởi các hoạt động WF out-of-the-box ? –