Struktura projektu

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.