SharpOffice to mój pierwszy duży projekt. Oraz mój pierwszy projekt open-source’owy, co oznacza, że jeśli ktoś będzie chciał mi pomóc, będzie musiał być w stanie mój kod przeczytać. Czytałem całkiem sporo o przypadkach brzydkiego, zawiłego kodu i chciałbym uniknąć tego w moich projektach. Dodatkowo mój projekt ma być zmodularyzowany, co wymusza pewne wzorce projektowe oraz powinno pomóc utrzymać fajną strukturę projektu.
Żeby jakoś mój projekt podzielić zacząłem od następujących modułów:
- SharpOffice.Core - zbiór interfejsów opisujących dane,
- SharpOffice.Common - zbiór podstawowych klas implementujących interfejsy z Core,
- SharpOffice.Window - zbiór interfejsów i podstawowych klas opisujących wygląd i strukturę UI,
- SharpOffice.Window.Runtime - środowisko uruchomieniowe, budujące obiekty na podstawie definicji aplikacji.
Staram się tworzyć interfejsy do niemal wszystkiego, tak aby później można było łatwo zmienić implementację oraz stosować Dependency Injection. No i jakoś to wszystko testować
Idealny scenariusz, do którego dążę, wygląda w ten sposób: tworzymy bibliotekę SharpApplication.dll, która zawiera wszystkie definicje wyglądu i zachowania naszej aplikacji; następnie uruchamiamy SharpOffice.Window.Runtime.exe ładując mu tę bibliotekę; dochodzi do przejrzenia wszystkich klas w bibliotece i mamy generowane okno z podpiętymi wszystkimi zachowaniami.