2009-10-28 9 views
8

Câu hỏi của tôi không phải là quá nhiều về việc sử dụng giao diện mà còn nhiều tính chất của tổ chức dự án.Các giao diện có nên nằm trong một dự án riêng biệt từ việc triển khai của chúng không?

Lưu ý: Tôi đang sử dụng VisualStudio trong một ứng dụng nhiều lớp.

Tệp giao diện của tôi có nên nằm trong một dự án riêng biệt khỏi triển khai của chúng không? Suy nghĩ ban đầu của tôi là sẽ có ích khi tách tất cả các giao diện dịch vụ của tôi thành dự án của riêng họ (và dự án triển khai ban đầu của tôi) để thực hiện dự án/dự án cụ thể. cần thiết.

Để làm rõ với một ví dụ: Giả sử tôi có một lớp giao diện kinh doanh có tên IBusinessService nằm trong không gian tên MyApp.Business.Services. Triển khai thực hiện của tôi FooBusinessService sẽ tồn tại trong cùng một không gian tên, nhưng một dự án khác trong VisualStudio. Nếu sau này về việc thực hiện cần phải được làm lại, một nhà phát triển có thể loại bỏ tham chiếu đến FooService.proj và thay thế nó bằng một tham chiếu đến BarService.proj. Điều này có vẻ như nó sẽ làm suy giảm giải pháp ứng dụng bằng cách cho phép bạn tham chiếu một dự án chỉ với các giao diện mà không cần triển khai cụ thể (có thể đã lỗi thời hoặc không sử dụng cho bạn), nhưng tôi có thiếu thứ gì đó không? Không phải là một ứng dụng.

+0

có thể trùng lặp của [Tôi có nên có một hội đồng riêng biệt cho các giao diện không?] (Http://stackoverflow.com/questions/3363312/should-i-have-a-separate-assembly-for-interfaces) – nawfal

Trả lời

10

Tôi đang ở bên bạn. Tôi thích đặt giao diện của mình vào một dự án riêng biệt VÀ trong một không gian tên khác. Ví dụ cổ điển là với các lớp truy cập dữ liệu. Bạn muốn có thể mã hóa một phiên bản MSSQL và một phiên bản MySQL, cả hai đều thực hiện cùng một giao diện. Như vậy, tôi thích rằng định nghĩa giao diện nằm trong một assembly/project riêng biệt. Dưới đây là một ví dụ về làm thế nào tôi đặt ra hội và không gian tên:

  • Elder.DataAccess.Core - chứa các giao diện và tiện ích phổ biến
  • Elder.DataAccess.MSSQL - triển khai MSSQL cụ thể của giao diện
  • Elder. DataAccess.MySQL - triển khai MySQL cụ thể của các giao diện

Điều này cho phép tôi sửa đổi triển khai mà không cần chạm vào dự án có chứa định nghĩa giao diện. Điều này cũng giúp tôi kiểm soát phiên bản và theo dõi thay đổi. Có thể có những cách khác để làm da mèo này, vì vậy tôi sẽ háo hức được gặp những câu trả lời của những người khác.

+1

Cảm ơn Scott. Đây là cấu trúc tôi đang sử dụng bây giờ, tôi chỉ muốn một số xác nhận rằng nó có ý nghĩa và rằng tôi đã không bỏ lỡ một cái gì đó. Trừ khi ai đó chỉ ra một lỗ hổng - tôi sẽ đi với điều này cho các giao diện của tôi. –