2010-08-10 2 views
7

Tôi đã đọc trên DDD và tôi nghĩ rằng tôi có thể đang sử dụng dịch vụ sai hoặc ít nhất là theo cách không lý tưởng. Các lớp dịch vụ của tôi có xu hướng có khá nhiều biến mẫu chứa tham chiếu kho lưu trữ và chúng dường như làm rất nhiều công việc (nghĩa là có rất nhiều phương thức).Tôi có đang sử dụng lớp dịch vụ chính xác không?

Bạn có nên tạo nhiều dịch vụ tập trung hơn không? Giống như một phương pháp cho mỗi dịch vụ thực hiện một số logic cụ thể? Ngoài ra, nên các lớp dịch vụ lưu trữ các biến mẫu cho các thực thể khác? Tôi đọc một cái gì đó về các dịch vụ là không quốc tịch, tôi không chắc chắn nếu tôi phá vỡ quy tắc đó bằng cách có những biến thể hiện.

Cảm ơn!

Trả lời

14

lớp dịch vụ của tôi có xu hướng có khá một vài biến dụ ...

này không nhất thiết phải là một mã mùi. Nếu dịch vụ của bạn đòi hỏi nhiều phụ thuộc để hoàn thành công việc của nó, thì đây chỉ đơn giản là một thực tế.

... có vẻ như chúng thực hiện rất nhiều công việc (ví dụ: có nhiều phương pháp).

Bạn có nên tạo nhiều dịch vụ tập trung hơn không?

Theo nguyên tắc chung, bạn có thể làm cho giao diện dịch vụ của mình trở nên chi tiết hơn (tức là ít phương pháp hơn). để gọi?). Nhưng trừ khi bạn phát hành dưới dạng API công khai, mức độ chi tiết của giao diện dịch vụ của bạn có thể được tinh chỉnh khi bạn thực hiện. Thông thường, khi bắt đầu một dự án, tôi sẽ bắt đầu chỉ với một dịch vụ, và phân chia nó theo thời gian. Nếu bạn là người tiêu dùng của các dịch vụ này, thì khi bạn bắt đầu cảm thấy nỗi đau của một giao diện nhận được lớn, bạn sẽ biết đó là thời gian để phá vỡ nó. Tất nhiên, nếu điều này API công khai, thì bạn sẽ phải thực hiện nhiều thiết kế khác.

Ngoài ra, các lớp dịch vụ có lưu trữ các biến mẫu vào các thực thể khác không? Tôi đọc một cái gì đó về các dịch vụ là không quốc tịch, tôi không chắc chắn nếu tôi phá vỡ quy tắc đó bằng cách có những biến thể hiện.

Lưu trữ phụ thuộc dưới dạng biến mẫu không nhất thiết ngụ ý rằng dịch vụ của bạn không phải là quốc tịch, miễn là các biến mẫu cũng không trạng thái. Để được coi là không trạng thái, các cuộc gọi phương thức trên một dịch vụ không được theo bất kỳ cách nào phụ thuộc vào các phương thức trước đó đang được gọi. Bạn sẽ có thể tải một cá thể dịch vụ duy nhất và chia sẻ nó cho ứng dụng của bạn (tức là một thể hiện của một dịch vụ không quốc tịch không nên cụ thể cho một phiên của người dùng cụ thể). Nói cách khác, dịch vụ của bạn không nên duy trì bất kỳ trạng thái nào giữa các cuộc gọi phương thức. Lưu trữ một sự phụ thuộc kho không trạng thái như là một biến trên một cá thể dịch vụ không vi phạm yêu cầu này.

Lý do dịch vụ không quốc tịch là mục tiêu mong muốn, không có trạng thái nào làm giảm đáng kể khả năng xảy ra lỗi.Nó đơn giản hóa việc thử nghiệm một phương thức dịch vụ bằng cách hạn chế các trường hợp thử nghiệm để thay đổi các tham số được truyền vào, thay vì phải lo lắng về trạng thái dịch vụ trước đó. Nó cũng có thể cung cấp các lợi ích hiệu suất.

+0

Cảm ơn câu trả lời tuyệt vời MJ! Điều này giúp ích rất nhiều. – chobo

+0

@MJ Richardson Bạn có thể chia sẻ id email của bạn (tôi được thêm vào hồ sơ) không? Tôi có một số nghi ngờ rằng tôi muốn làm rõ về bài đăng này. –

0

Tôi khuyên bạn nên đọc về tiêm phụ thuộc, đảo ngược kiểm soát và tương tự.

Đây là bài viết của Fowler: http://martinfowler.com/articles/injection.html, mặc dù tôi luôn thấy anh ấy hơi hơn một chút. Tôi sẽ thử đi qua một hướng dẫn đại diện cho việc sử dụng một container DI/IoC.