Giao diện cho biết cách thức hoạt động. Hãy nghĩ về nó như một hợp đồng hoặc một mẫu. Nó là chìa khóa cho những thứ như Inverson của Control hoặc Dependancy Injection.
Tôi sử dụng Sơ đồ cấu trúc làm vùng chứa IoC của mình. Điều này cho phép tôi xác định một giao diện cho tất cả các lớp của tôi. Trong trường hợp bạn có thể nói
Widget w = new Widget();
tôi sẽ nói
IWidget w = ObjectFactory.GetInstance<IWidget>();
này là rất mạnh mẽ trong mã của tôi là không nói hẳn những gì một Widget thật sự là. Nó chỉ biết những gì một Widget có thể làm dựa trên giao diện của IWidget.
Điều này có một số sức mạnh tuyệt vời để nó trong đó bây giờ mà tôi đang sử dụng một container IoC tôi có thể làm một vài điều tiện lợi hơn. Trong bài kiểm tra đơn vị của tôi, nơi tôi cần phải sử dụng một Widget tôi có thể tạo ra một giả cho Widget. Vì vậy, nói rằng Widget của tôi làm một cái gì đó rất mạnh mẽ bằng cách kết nối với một cơ sở dữ liệu hoặc một dịch vụ web, mô phỏng của tôi có thể mô phỏng kết nối với các tài nguyên này và trả về cho tôi dữ liệu được phân tích. Điều này làm cho thử nghiệm của tôi chạy nhanh hơn và hoạt động theo cách đáng tin cậy hơn. Bởi vì tôi đang sử dụng StructureMap tôi có thể nói StructureMap để tải việc thực hiện thực tế của Widget của tôi trong quá trình sản xuất sử dụng mã của tôi và phiên bản giả của Widget trong quá trình thử nghiệm hoặc lập trình hoặc theo cấu hình.
Ngoài ra, vì tôi đang sử dụng vùng chứa IoC, tôi có thể cung cấp các tính năng mới thú vị cho ứng dụng của mình như viết ba cách khác nhau để lưu trữ dữ liệu. Tôi có thể có một bộ nhớ cache hộp phát triển địa phương bằng cách sử dụng một công cụ như Lucene.NET cho một bộ nhớ cache cục bộ. Tôi có thể có một máy chủ phát triển sử dụng bộ nhớ cache .NET chạy rất tốt trên một hộp. Và sau đó tôi có thể có một lựa chọn thứ ba cho các máy chủ sản xuất của tôi sử dụng một lớp bộ nhớ cache như MemCache Win32 hoặc Velocity. Miễn là tất cả ba triển khai bộ nhớ đệm đều tuân theo cùng một giao diện, việc triển khai thực tế của chúng không ảnh hưởng đến tôi (hoặc mã của tôi). Tôi chỉ đơn giản yêu cầu StructureMap đi lấy môi trường hiện tại và sau đó đi làm.
Nếu bạn theo dõi Dependency Injection thì giao diện có ích ở đây cũng với vùng chứa IoC như StructureMap trong đó tôi có thể khai báo cách sử dụng lớp bằng giao diện trong hàm tạo của lớp.
public class Widget(IWidgetRepository repository, IWidgetService service) : IWidget
{
//do something here using my repository and service
}
Và sau đó khi tôi mới lên một thể hiện của Widget bằng cách StructureMap như
IWidget widget = ObjectFactory.GetInstance<IWidget>();
Thông báo này rằng tôi không xác định kho hoặc dịch vụ trong các nhà xây dựng. StructureMap biết theo cách của các giao diện được chỉ định trong hàm dựng làm thế nào để đi lấy các cá thể thích hợp và truyền chúng vào. Điều này làm cho mã rất mạnh mẽ và sạch sẽ!
Tất cả từ định nghĩa đơn giản về Giao diện và một số cách sử dụng thông minh của chúng!
Xem tại đây http://stackoverflow.com/questions/56867/interface-vs-base-class và tại đây http://stackoverflow.com/questions/444245/how-will-i-know-when-to- tạo một giao diện và tìm kiếm "C# interface" để biết thêm. – Marc