2009-05-05 1 views
5

Wystarczy zacząć uczyć się wzorów. Oto proste pytanie, które mam.Jakiego wzoru należy użyć do przetwarzania raportów w infrastrukturę, aby umożliwić różne reprezentacje?

mam obiektu Report zawierający Page S, z których każda zawiera różne ReportElement s (Table, Paragraph, Image) i tak dalej. Załóżmy, że chcę utworzyć infrastrukturę do pobrania Report i wypluć różne reprezentacje tego Report, takie jak dokument w formacie RTF, dokument sformatowany w formacie TeX, dokument HTML itp.

Który wzór wzoru tu szukam ?

Odpowiedz

10

Strategy Wierzę.

Można utworzyć generator RTFReport, HtmlReportGenerator, itd ..., które wszystkie implementują ten sam interfejs "IReportGenerator", ale każda konkretna klasa implementuje metodę "WriteReport (Report r)" w inny sposób.

+0

Każdy "Generator" może być Konstruktorem. http://pl.wikipedia.org/wiki/Builder_pattern –

+0

Hmm, wierzę, że "obiekt" (Raport) został już stworzony; "Generator" powinien po prostu "wygenerować" plik, który zawiera RTF/HTML/... reprezentację podanej instancji raportu. –

+0

"Generator powinien ..." Uzgodnione - chodzi o to, że wzory zagnieżdżają się i zachodzą na siebie. Rzadko istnieje jeden wzorzec dla tego rodzaju rzeczy. –

0

Nie szukaj konkretnego wzoru. Wiele wzorów ma tę samą strukturę, ale różne cele. W każdym razie zawsze musisz wprowadzić pewne zmiany we wzorze, aby użyć go w konkretnym przypadku. Po nauczeniu się wzorów będziesz w stanie prawidłowo myśleć o przedmiotach i ich związku.

Możesz używać strategii dla różnych reprezentacji, możesz użyć budowniczego do tworzenia raportu.

Możesz także użyć czegoś prostszego. Podobnie jak połączenie delegacji i dziedziczenia (dla mnie jest to najlepsze rozwiązanie twojego problemu). Wystarczy utworzyć ierarchię reprezentacji (BasicView < | - RTFView, TextView ...) i przekazać raport do konstruktora BasicView. Niech różne widoki zapewniają inną transformację danych oryginalnego raportu.

1

Dla grupy zorganizowanych obiektów obowiązuje również wzór Visitor. Jest to trochę lepsze dzięki przechodzeniu przez struktury obiektów, w zależności od potrzeb można go użyć do innych zadań, które muszą zajmować się raportami jako grupą.

0

Prawdopodobnie użyłbym wzoru złożonego do przedstawienia drzewa elementów raportu, a odwiedzający (jak powiedział Harald), aby przekształcić obiekt raportu w konkretne konkretne przedstawienie.