Tôi có một lớp, chứa một số chi tiết trong cấu trúc dữ liệu lớn, chấp nhận thuật toán để thực hiện một số phép tính trên đó, có phương pháp xác thực đầu vào cho cấu trúc dữ liệu. Nhưng sau đó tôi muốn trả về cấu trúc dữ liệu, để nó có thể được chuyển đổi thành các dạng đầu ra khác nhau (chuỗi/C# DataTable/đầu ra tệp tùy chỉnh) bởi Mô hình Xem.Thiết kế OO - Hiển thị chi tiết triển khai thông qua giao diện
class MyProductsCollection {
private IDictionary<string, IDictionary<int, ISet<Period>>> products;
// ctors, verify input, add and run_algorithm methods
}
Tôi biết rằng bạn có nghĩa vụ phải sử dụng nguyên tắc thiết kế "phụ thuộc vào giao diện không triển khai", vì vậy tôi muốn tạo giao diện cho lớp học.
Làm cách nào để tránh viết giao diện sau? Lý do là nó sẽ hiển thị chi tiết triển khai và ràng buộc bất kỳ triển khai cụ thể nào khác để trả về cùng một biểu mẫu.
interface IProductsCollection {
IDictionary<string, IDictionary<int, ISet<IPeriod>>> GetData();
// other methods
}
Làm cách nào tôi có thể dễ dàng lặp lại cấu trúc dữ liệu để tạo các loại kết quả đầu ra khác nhau mà không để lộ nó như thế này?
EDIT:
Kể từ khi lớp mất trong IFunc<IDictionary<string, IDictionary<int, ISet<IPeriod>>>>
trong constructor để lặp qua các cấu trúc dữ liệu và thực hiện các phép tính, tôi có thể cung cấp nó với IFunc
khác, trong đó sẽ xây dựng đầu ra thay vì tính toán chạy. Tuy nhiên, tôi không biết làm thế nào tôi có thể làm điều này ngoài việc xây dựng lớp bê tông.
Sử dụng lớp trừu tượng và phương pháp ảo. Các lớp trừu tượng cũng là * giao diện *. – pasty