Mam klasę, która przechowuje pewne szczegóły w dużej strukturze danych, akceptuje algorytm do wykonywania na niej pewnych obliczeń, ma metody sprawdzania danych wejściowych do struktury danych. Ale chciałbym zwrócić strukturę danych, aby można było przekształcić ją w różne formularze wyjściowe (ciąg/C# DataTable/niestandardowe wyjście pliku) przez model widoku.OO Design - Ujawnianie szczegółów implementacji za pomocą interfejsu
class MyProductsCollection {
private IDictionary<string, IDictionary<int, ISet<Period>>> products;
// ctors, verify input, add and run_algorithm methods
}
Wiem, że należy używać zasady projektowania "polegaj na interfejsie, a nie implementacji", dlatego chcę utworzyć interfejs dla klasy.
Jak mogę uniknąć pisania następującego interfejsu? Powód tego ujawnia szczegóły implementacji i wiąże wszelkie inne konkretne implementacje, aby zwrócić ten sam formularz.
interface IProductsCollection {
IDictionary<string, IDictionary<int, ISet<IPeriod>>> GetData();
// other methods
}
Jak mogę łatwo iterować nad strukturą danych, aby utworzyć różne odmiany produktów bez demonstrowania tego w ten sposób?
EDIT:
Ponieważ klasa bierze w IFunc<IDictionary<string, IDictionary<int, ISet<IPeriod>>>>
w konstruktorze iteracyjne nad struktury danych i wykonywania obliczeń, mogę dostarczyć go innym IFunc
, które skonstruowania wyjście zamiast obliczeń rzędu. Jednak nie wiem, jak mogłem to zrobić poza konkretnym konstruktorem klasy.
Użyj metody abstrakcyjnej i metod wirtualnych. Klasy abstrakcyjne to także * interfejsy *. – pasty