2009-05-29 33 views
6

Ai đó đã nói với tôi trong một số answer to a stackoverflow question rằng "hai khẩu súng lớn" cho mẫu MVVM là 1) hành vi đính kèm và 2) dịch vụ. Tôi cho rằng ông có nghĩa là "dịch vụ WPF" một cụm từ mà tôi tìm thấy được sử dụng trong các cách sau:Chính xác thì "dịch vụ WPF" là gì?

PresentationFoundation.dll xác định WPF điều khiển các loại, hình ảnh động và hỗ trợ đa phương tiện, dữ liệu ràng buộc hỗ trợ, và khác Dịch vụ WPF.

Nhiều người trong số những dịch vụ WPF (de-coupled eventing, databinding phong phú, phong cách, tài nguyên, vv) là phần mềm phát triển thực hành tốt nhất hội tụ trong một duy nhất, giao diện người dùng khai báo stack.

Bạn sẽ hiểu được động lực đằng sau WPF, tìm hiểu cú pháp của XAML, kiểm tra mô hình lập trình cốt lõi, và khảo sát vài dịch vụ WPF.

Không ai trong số những cuốn sách WPF Tôi thậm chí còn đề cập đến "dịch vụ WPF" như vậy, như vậy là điều này chỉ một từ có nghĩa là "WPF tính năng" như eventing tách riêng, liên kết dữ liệu phong phú, phong cách, vv hoặc có cái gì khác đằng sau thuật ngữ "Dịch vụ WPF" không?

+0

Vâng, đó là về các tính năng. Tôi muốn nói trong bối cảnh đó, "dịch vụ" chỉ là một từ buzz để làm cho nó âm thanh tốt hơn. Cũng giống như "trải nghiệm người dùng" và tương tự. – Botz3000

Trả lời

3

Anh ấy không nói về dịch vụ WPF, nhưng dịch vụ ứng dụng. Tức là, tóm tắt một số phần của chức năng thành một dịch vụ độc lập mà nhiều máy ảo có thể tiêu thụ.

+0

Điều đó có nghĩa là gì, bạn có đang nói về Dịch vụ Windows, Dịch vụ Web không? Bài viết wikipedia trên WPF cung cấp các ví dụ về "dịch vụ ứng dụng WPF" như "giao diện người dùng, bản vẽ 2D và 3D, tài liệu cố định và thích ứng, kiểu chữ tiên tiến, đồ họa vector, đồ họa raster, hoạt ảnh, ràng buộc dữ liệu, âm thanh và video". Điều đó có nghĩa là gì, v.v. "nhiều ViewModels có thể tiêu thụ dữ liệu ràng buộc". Đó luôn là vấn đề. Điều gì đằng sau từ "dịch vụ WPF" và "dịch vụ ứng dụng" theo nghĩa này? Hay bạn có ý nghĩa theo nghĩa cổ điển như "dịch vụ an ninh"? –

+3

Bởi "dịch vụ" tôi chỉ có nghĩa là một trừu tượng hơn một mảnh chức năng. Có lẽ các chức năng cơ bản là một thành phần COM, hoặc truy cập cơ sở dữ liệu hoặc bất cứ điều gì. Không quan trọng - VM chỉ biết về một giao diện mà nó có thể sử dụng để tương tác với chức năng đã nói. –

13

Martin Fowler có mô tả dịch vụ là gì trong bài viết Dependency Injection của mình. Nói một cách đơn giản, một dịch vụ là một đối tượng cung cấp các chức năng được sử dụng bởi các đối tượng khác. Bạn sẽ tìm thấy thuật ngữ được sử dụng nhiều khi thảo luận các mẫu Inversion of ControlService Locator.

Để làm cho bê tông này với chủ đề trong tầm tay, hãy suy nghĩ về cách chúng tôi sẽ hiển thị một hộp thư trong mẫu MVVM. Gọi MessageBox.Show() sẽ là xấu, Ray. Điều này liên kết chặt chẽ ViewModel với kiến ​​trúc giao diện người dùng và làm cho ViewModel khó kiểm tra. Thay vào đó, một giải pháp sẽ là sử dụng một dịch vụ, mà chúng tôi sẽ gọi IDisplayMessage. Dịch vụ này được cung cấp cho ViewModel bằng cách nào đó (thông qua một trong hai mẫu trên), và dịch vụ này được sử dụng để "hiển thị" một tin nhắn. Trong quá trình hoạt động bình thường, một phiên bản cụ thể của dịch vụ này sẽ gọi MessageBox.Show(), nhưng trong quá trình thử nghiệm, chúng tôi có thể cung cấp một phiên bản cụ thể khác (một kiểm tra kép) hoạt động khác nhau (thường xuyên hoặc nếu chúng tôi đảm bảo rằng ViewModel hiển thị tin nhắn, một phiên bản ghi lại cuộc gọi để chúng tôi có thể khẳng định rằng nó đã xảy ra). Onyx (từ chối trách nhiệm: Tôi là tác giả) chỉ cung cấp một dịch vụ như vậy và cơ sở hạ tầng cần thiết để cung cấp dịch vụ này (và các dịch vụ khác) cho ViewModel của bạn.

Cập nhật: Vì phản hồi này được thực hiện, tôi đã viết một bài đăng blog Services: Your ViewModel Deathstar, bao gồm chủ đề khá tốt. Đây là một phần của "chuỗi" bài đăng và người đọc cũng có thể quan tâm đến bài đăng đầu tiên Behavior - Your Trusty ViewModel Bazooka.

+1

Tại sao không trỏ đến bài viết của bạn? Hành vi được đính kèm: http://wekempf.spaces.live.com/Blog/cns!D18C3EC06EA971CF!940.entry Dịch vụ: http://wekempf.spaces.live.com/Blog/cns!D18C3EC06EA971CF!951. entry – Trainee4Life

+0

Vào thời điểm đó, các bài báo không tồn tại, và tôi không nghĩ là sẽ quay lại đây và cập nhật câu trả lời. – wekempf

Các vấn đề liên quan