Koncepcja programu generującego pliki ofertowe

2

Tytułem wstępu programuje czasem dla hobby. Jednak teraz chciałbym coś zrobić w C#, problem wydaje mi się idealny dla programowania obiektowego a jego rozwiązanie przyda mi się do prowadzonej działalności. Liczę na jakieś podpowiedzi jak "ugryźć" temat.
Chciałbym stworzyć program generujący oferty. Oferta ma być generowana jako plik PDF. Każda oferta składa się z X stron i z Y modułów, przy czym moduł rozumiem jako:
user image
Zakładam, że każdy moduł będzie miał tytuł, jakiś element graficzny i krótki opis. Oczywiście będzie więcej rodzajów modułów i każdy implementujący np. interfejs *IModule *
To jest co chcę osiągnąć.
Moja koncepcja: program (C# + wpf) w zależności o podanej specyfikacji (które moduły, ich zawartości itp.) przez użytkownika będzie generował powyższe strony jako kod HTML z CSS. W programie będzie podgląd HTML i możliwe drukowanie do pdf albo zapisywanie jako pdf. I teraz moje pytanie czy to jest najbardziej optymalny sposób aby to zrobić? Może macie jakieś inne pomysły, np. add-ins na Worda etc.? Na wszelkie propozycje jestem otwarty. Program będzie służył tylko moim potrzebom więc nie musi być wyrafinowany. Oczywiście chciałbym w jak największym stopni wykorzystywać istniejące klasy i ogólnodostępne rozwiązania.

0

Interfejsy są dobre ale to nie znaczy że trzeba je pchać wszędzie, IModule mi brzmi jak nazwa dla interfejsu który jest aby być (ale może się mylę).
Co do Wordów Html-i i Pdf-ów mają swoje wady i zalety ale to są różnice techniczne, a dobrze napisany soft powinien mieć możliwość zmiany typu generowanego pliku bez konieczności przepisywania softu w całości.

0
szogun1987 napisał(a):

Interfejsy są dobre ale to nie znaczy że trzeba je pchać wszędzie, IModule mi brzmi jak nazwa dla interfejsu który jest aby być (ale może się mylę).

Dzięki za odpowiedź.

Popraw mnie jeżeli się mylę albo źle kombinuję. Wykorzystanie takiego interfejsu w tym przypadku byłoby coś na styl:

 
using System.Windows.Controls; 
 
interface IModule
    {
        public string PreviewModule(); //Metoda zwracająca string z kodem HTML do podglądu danego modułu
        public ListBoxItem GetListBoxItem(); //Metoda zwracająca ListBoxItem z kontrolkami do danego modułu
    }

Założyłem, że kontrola każdego modułu będzie w ListBoxItem. Przez kontrole rozumiem zmienianie tytułu, wartości itp.
Dzięki temu jak się nie mylę możemy załadować każdy moduł oraz otrzymać jego podgląd np poprzez:

public class SomeApp
{
        public delegate ListBoxItem LoadModulesDelegate();
        public delegate string LoadPreviewModulesDelegate();
        private LoadModulesDelegate loadModules;
        private LoadPreviewModulesDelegate loadPreviewModules;
        
        private List<IModule> modules; //Lista z dostępnymi modułami;

        public SomeApp(){

             // Jakiś tam konstruktor...
        }

        public void LoadModules(){

            foreach (var a in modules)
            {

                this.loadModules += a.GetListBoxItem;
                this.loadPreviewModules += a.PreviewModule;

            }
          //Odpowiednie załadowanie w WPF oraz na podglądzie


        }
 
 
}

W tym wypadku dzięki polimorfizmowi możemy stwarzać dowolny moduł, bez ruszania trzonu aplikacji. Tak to widzę. Czy jest błąd w moim rozumowaniu i tutaj faktycznie jest pchanie tych interfejsów gdzie popadnie? (pomijam w tym wypadku dziedziczenie po klasie, bo dla mnie akurat tutaj to synonim)

1 użytkowników online, w tym zalogowanych: 0, gości: 1