Như trong hầu hết các trường hợp: tùy theo điều kiện.
Nhưng trong 99% tất cả các trường hợp, tôi đặt giao diện vào các hội đồng của riêng mình, được nhóm thành các đơn vị lô-gic để ngăn chặn các phụ thuộc giao diện chặt chẽ. Trong những ngày trước, tôi chỉ đặt nó ở nơi triển khai đầu tiên. Điều này đã trở thành một mớ hỗn độn chặt chẽ mà không thể chia ra sau.
Nếu bạn thực hành/cố gắng ghép nối lỏng lẻo, tôi khuyên bạn nên di chuyển các giao diện để tách riêng các cụm. tôi thích để chỉ bao gồm:
- giao diện,
- enumerations
- hằng
- phương pháp khuyến nông cho các giao diện (không phụ thuộc vào việc triển khai cụ thể)
- "ổn định" các lớp học và cấu trúc (ví dụ:những người sẽ không bao giờ thay đổi hoặc được thừa hưởng)
thành "hội giao diện" và chỉ tham khảo:
- khác "giao diện hội"
- "công cụ lắp ráp" (mà nên themself chỉ chứa các công cụ ổn định như các phương pháp mở rộng, hằng số)
Điều này không áp dụng cho các giao diện được sử dụng trong nội bộ chỉ được sử dụng trong một assembly (sẽ là 1% giao diện).
Việc thực hiện duy nhất có thể được đưa vào lắp ráp giống như giao diện chính nó là một, rằng:
- không dựa vào lắp ráp phi giao diện khác (bạn không muốn bao gồm công cụ để sử dụng một hội đồng giao diện chỉ cần thiết cho một triển khai mà bạn không muốn sử dụng).
- là một số loại mặc định hoặc không-op thực hiện
Các "thực hiện lắp ráp" chỉ nên được tham chiếu trong lắp ráp chính, hội đồng khác chỉ bao gồm lắp ráp giao diện. Điều này cũng đảm bảo rằng bạn không sử dụng trực tiếp triển khai hoặc kiểm tra xem giao diện có thực hiện đặc biệt này hay không.
Tại sao? Bằng cách này, hội đồng của bạn chỉ dựa vào các hội đồng ổn định và không được kết hợp chặt chẽ. Đây cũng là cách ưu tiên nếu bạn định sử dụng tiêm phụ thuộc.
Không gian tên:
Bạn nên đặt các triển khai trong không gian tên con của giao diện. Vì vậy, để lấy ví dụ của bạn, tôi muốn đề nghị:
- đặt giao diện trong
MyCompany.AccountPackage.MasterAccounts
- đặt phương pháp khuyến nông, công cụ ổn định khác cho giao diện này cũng trong
MyCompany.AccountPackage.MasterAccounts
- đặt một thực hiện trong một tên đúng không gian tên phụ
MyCompany.AccountPackage.MasterAccounts.SQLMasterAccounts
hoặc chỉ MyCompany.AccountPackage.MasterAccounts.Implementation
.
Tại sao?
Từ phía triển khai, điều này có nghĩa là bạn nhận được tất cả giao diện và tiện ích mở rộng mà không phải sử dụng using MyCompany.AccountPackage.MasterAccounts.Interfaces
. Từ phía khách hàng, điều này có nghĩa là bạn sẽ được bảo vệ khỏi quá nhiều tùy chọn từ intellisense trong các assembly triển khai (không nên bao gồm các assembly khác), nhưng dễ dàng truy cập vào các cài đặt trong assembly chính, nơi bạn chọn triển khai cụ thể để sử dụng.
Trong tất cả các khóa học và hướng dẫn tôi đã thực hiện giao diện luôn được đặt ngay trên lớp –
Tôi sẽ * không * cung cấp cho họ không gian tên hoặc thư viện riêng của họ. Là một trong những người siêu thông minh tranh luận trong * Hướng dẫn thiết kế .NET Framework * (Tôi không thể nhớ cái nào và cuốn sách của tôi không tiện dụng), bạn không nên giao diện trừ khi bạn * cũng * vận hành một cách cụ thể giao diện đó. Vì vậy, chỉ cần đặt giao diện trong cùng một không gian tên như thực hiện đó. –
Điều đó nói rằng, tôi thực sự sẽ cố gắng giảm thiểu số lượng giao diện mà bạn viết, thay vào đó, hãy ưu tiên các lớp trừu tượng bất cứ khi nào có thể. Điều này mang lại cho bạn gần như tất cả các lợi thế của một giao diện, trong khi cũng cho phép bạn cung cấp các triển khai mặc định cho nhiều phương thức. Nhưng điều này thực sự chủ quan; Tôi không chắc đó là một chủ đề thích hợp cho SO. –