10. Service, ServiceContract và ServiceInterface
10.5. Service Các ví dụ
10.5.1. Đặc tính uses và usedBy áp dụng cho Service
Theo định hướng, khơng thật sự có ý nghĩa khi nói về một dịch vụ sử dụng một phần tử khác. Trong khi vật thực hiện dịch vụ đó có thể bao gồm cả việc sử dụng các phần tử khác (và chắc chắn thuộc trường hợp của Service Composition), bản thân dịch vụ đó (khi là biểu diễn logic đơn thuần) không sử dụng các phần tử khác.
Theo định hướng khác, phổ biến nhất của tất cả các tương tác được tìm thấy trong SOA: quan niệm rằng một phần tử sử dụng một dịch vụ bằng việc tương tác với nó. Lưu ý rằng theo quan điểm vận hành, thì tương tác này thực chất là việc đạt được một điều gì đó ngồi dịch vụ bằng cách thực hiện các bước điển hình như sau:
- Chọn dịch vụ để tương tác (điều này không thể biết trước cho dù nó được làm tại thời gian chạy hoặc tĩnh tại giai đoạn thiết kế và/hoặc xây dựng).
- Chọn một phần tử thực hiện dịch vụ đó [trong mơi trường SOA, điều này thường được thực hiện “bên trong” một trục dịch vụ tổng thể (ESB)];
- Tương tác với dịch vụ phần tử đã lựa chọn (thường cũng qua ESB).
10.5.2. Đặc tính represents và representedBy áp dụng cho Service
Khái niệm thành phần trung gian dịch vụ (service mediations), các proxy dịch vụ, trục dịch vụ tổng thể (ESB),...là những khái niệm cơ bản đối với những người triển khai thực tế khi mô tả và thực hiện các khía cạnh về vận hành các hệ thống SOA. Theo quan điểm của bản thể luận, tất cả những khái niệm này có thể được nắm bắt bởi một phần tử khác đại diện cho dịch vụ đó, mức độ gián tiếp có tính quan trọng khi nó khơng muốn kết nối về hoạt động đến một điểm dịch vụ (service endpoint) cụ thể, thay vào đó là duy trình kết nối lỏng và khả năng chuyển đổi linh hoạt khi cần thiết. Lưu ý rằng, bằng việc tận dùng đặc tính represents và representedBy theo cách này thì mơ hình (pattern) tương tác vận hành tương đối phức tạp mô tả trong phần 9.6.2 (chọn dịch vụ, chọn một phần tử thực hiện dịch vụ và tương tác với phần tử lựa chọn) sẽ được đóng gói.
Trong khi một dịch vụ được đại diện bởi một sự vật là khá bình thường, nhưng lại rất khó khăn để tưởng tượng dịch vụ có thể biểu diễn cái gì. Ở một mức độ thực tế nào đó, một dịch vụ biểu diễn một sự biểu hiện bất kỳ của chính nó, chỉ có đặc tính performs và performedBy được lựa chọn để mơ tả điều này thay vì sử dụng các đặc tính represents và representedBy. Kết quả là các ứng dụng thực tế của bản thể luận có thể có các dịch vụ biểu diễn sự vật bất kỳ và không mong muốn.
10.5.3. Minh họa sự khác biệt giữa làm một Task và thực hiện một Service
Sự khác biệt giữa một tác nhân con người làm một tác vụ và một phần tử (công nghệ, tác nhân con người,…) thực hiện một dịch vụ là rất quan trọng. Tác nhân con người thực hiện tác vụ có trách nhiệm làm tác vụ đó, tuy nhiên, trong thực tế, nhiều trường hợp có thể sử dụng một dịch vụ để đạt được kết quả đó.
- John là một thể hiện của HumanActor.
- WashWindows là một thể hiện của Task được làm bởi John. - SoapWater là một thể hiện của Service.
- WaterTap là một thể hiện của Element. - WaterTap thực hiện SoapWater.
- John sử dụng SoapWater (để làm WashWindows).
Lưu ý rằng SoapWater rõ ràng không trực tiếp làm WashWindow cũng không phải WaterTap làm WashWindows.
10.5.4. Ví dụ về rửa xe
Joe cung cấp 2 dịch vụ khác nhau cho khách hàng: dịch vụ rửa xe cơ bản (basic wash) và dịch vụ rửa xe chất lượng cao (gold wash). Điều này có thể được thể hiện trong bản thể luận theo cách sau (tập con đối với thành phần tương ứng với 2 dịch vụ này):
- GoldWash là một thể hiện của Service. - BasicWash là một thể hiện của Service.
- CarWash thực hiện cả BasicWash và GoldWash.
- WashManager thể hiện cả BasicWash và GoldWash (có nghĩa là điểm tương tác khi khách hàng yêu cầu dịch vụ cũng như trả tiền).
Lưu ý rằng việc sử dụng có mục đích WashManager đại diện cho cả 2 dịch vụ. Điều này phụ thuộc vào quyết định của Joe khi khách hàng rửa xe không tương tác trực tiếp với bộ phận rửa xe, thay vào đó là tương tác với người (tác nhân con người) có vai trị là quản lý việc rửa xe.