Có nhiều yếu tố đi vào quyết định tạo ra một lớp dịch vụ. Tôi đã tạo các lớp dịch vụ trong quá khứ vì những lý do sau.
- Mã cần được sử dụng lại bởi nhiều khách hàng.
- Thư viện bên thứ ba mà chúng tôi có giấy phép hạn chế.
- Các bên thứ ba cần một điểm tích hợp vào hệ thống của chúng tôi.
- Tập trung logic kinh doanh trùng lặp.
Trường hợp 1: Bạn đang tạo chức năng cơ bản cần được sử dụng bởi vô số khách hàng khác nhau. Lớp dịch vụ tích hợp chức năng cho các khách hàng khác nhau để khai thác chức năng được cung cấp của bạn ngay lập tức.
Trường hợp 2: Bạn thường lưu trữ mã trong không gian ứng dụng nhưng bạn đang sử dụng thư viện của bên thứ ba mà bạn có giấy phép hạn chế. Trong trường hợp này, bạn có một tài nguyên bạn muốn sử dụng ở mọi nơi, nhưng chỉ có một số lượng hạn chế. Nếu bạn lưu trữ nó phía sau một dịch vụ thì toàn bộ tổ chức của bạn có thể sử dụng dịch vụ đó từ các ứng dụng của họ mà không phải mua giấy phép cho mỗi lưu trữ riêng lẻ.
Trường hợp 3: Bạn đang xây dựng chức năng cho bên thứ ba liên lạc với bạn. Trong ví dụ của bạn, bạn có thể thiết lập điểm cuối hàng tồn kho để cho phép các nhà cung cấp chuyển tin nhắn cho bạn về các lô hàng sản phẩm đến.
Trường hợp 4: Bạn đã phân tích toàn bộ doanh nghiệp mã của mình và thấy rằng các nhóm riêng biệt đã tạo ra cùng một thứ (chỉ được thực hiện hơi khác nhau). Với lớp dịch vụ, bạn có thể chọn (các) phương pháp tốt nhất và bây giờ bạn có thể thực hiện quy trình tương tự trên tất cả các nhóm bằng cách yêu cầu họ gọi vào dịch vụ. Một lợi ích khác để tập trung logic là khi tìm thấy lỗi. Bây giờ bạn có thể triển khai sửa lỗi một lần và tất cả khách hàng được hưởng lợi ích cùng một lúc.
Tất cả điều này đang được nói có những tiêu cực tiềm năng cho một lớp dịch vụ.
- Thêm sự phức tạp của hệ thống. Trường hợp trước đây bạn chỉ có một ứng dụng để gỡ lỗi thì bây giờ bạn có hai ứng dụng. Sự cố sản xuất yêu cầu kiểm tra cài đặt ứng dụng khách, cài đặt ứng dụng dịch vụ hoặc sự cố giao tiếp giữa các ứng dụng máy khách và máy chủ được thiết lập chính xác. Điều này có thể khó khăn nếu bạn chưa bao giờ làm điều đó trước đây.
- Một điểm thất bại. Nếu bạn bị mất dịch vụ, tất cả khách hàng đều bị ảnh hưởng. Khi mã không được triển khai theo cách này, rủi ro có thể ít hơn (mặc dù có nhiều cách để giảm thiểu điều này).
- Phiên bản có thể khó hơn để làm. Khi bạn có một ứng dụng sử dụng dịch vụ triển khai thay đổi giao diện có thể được thực hiện cùng một lúc giữa hai ứng dụng. Khi bạn có nhiều khách hàng, bạn phải quản lý ai là người trên V1, người đang ở V2 và điều phối việc loại bỏ V1 (khi bạn biết mọi người đã cập nhật lên V2).
Điểm chính là nó không phải lúc nào cũng là một cú hích để làm cho dịch vụ hệ thống của bạn được định hướng. Theo kinh nghiệm của tôi, đó thường là một ý tưởng tốt (tôi có xu hướng cấu trúc các ứng dụng theo cách này), nhưng đó không phải là một quyết định tự động. Vào cuối ngày, bạn cần cân nhắc những ưu và nhược điểm và đưa ra quyết định phù hợp với tình huống của mình.