Projekt Winthio rozpocząłem we wrześniu 2011. Ma to być CMS dla witryn internetowych. Będzie pozwalał na pisanie i publikowanie treści on-line poprzez przeglądarkę internetową (i nie tylko). Podstawowe założenia projektu to:
- wielojęzykowość (możliwość jednoczesnego pisania treści w wielu językach)
- bezpieczeństwo na poziomie systemów bankowych
- edycja i konfiguracja w trybie WYSIWYG (brak tzw. back-end)
- pełna funkcjonalność na urządzeniach mobilnych
- przepływy pracy związane z publikowaniem treści (workflow)
- łatwość sporządzania kopii zapasowych i migracji (backup)
- system wtyczek rozszerzających możliwości (plugins)
- możliwość działania bez JavaScript-u
- stopniowe ulepszanie interfejsu użytkownika (progressive enhancement)
Pierwotne założenia zakładały napisanie systemu równolegle w dwóch środowiskach: PHP i ASP.NET. Szczegółowa analiza wymagań prowadzi jednak do wniosku, że PHP spełnia więcej oczekiwań niż ASP.NET. Czynnikiem decydującym okazała się powszechna dostępność serwerów na których można testować to oprogramowanie. Jest to dla mnie utrudnienie ze względu na to, że nigdy nie stworzyłem większego systemu w języku PHP, ale jednocześnie będzie to okazją do nauki.
Problemy przed którymi stanąłem okazały się zmierzać w kierunku zupełnie innym niż przewidywany. Zamiast systemu CMS zeszły o poziom niżej, aż do budowy mini środowiska programowania aplikacji internetowych [web development framework], czyli czegoś w rodzaju ASP.NET-u. Podstawowe pytanie polega więc na tym czy wyważać otwarte drzwi? Można spróbować, ale będzie to wymagało dużego nakładu pracy i bardzo przemyślanego cyklu wytwórczego (żeby sobie tej pracy zaoszczędzić). Po kilku miesiącach (sic!) myślenia i sprawdzania podjąłem następujące decyzje:
- Rozpoczynamy od czystego HTML 5, bez Javascript-u, podstawowy CSS nie wykraczający poza 2.1
- Tworzymy bibliotekę kontrolek (okna, przyciski, pola tekstowe, itp.)
- Tworzymy własny moduł do obsługi sesji
- Maksymalna modułowość, praktycznie każda funkcjonalność na interfejsach
- CMS zajmuje się generowaniem statycznych stron html, które są następnie wyświetlane, elementy dynamiczne są dodawane później i działają w oparciu o AJAX (Json).
- Wyróżniamy 7 rodzajów wtyczek:renderer (jak wygląda wyjściowy html), language (jak obsługiwać język), theme (kolory, grafika, CSS, Javascript), module (funkcjonalności opcjonalne), storage (obsługa bazy danych), manager (obsługa dystrybucji wtyczek), core (rdzeń systemu, który to wszystko łączy).
- Moduł wprowadza rozszerzenia modelu i udostępnia klocki [blocks], które spełniają rolę kontrolerów w MVC. Każdy klocek może mieć wiele widoków i wyświetlać jeden z nich w zależności od sytuacji. Aplikację buduje się dosłownie z klocków.
- Dependency injection zostanie zrealizowane w oparciu o Service Locator.
Aktualne prace koncentrują się nad bezpiecznym zarządzaniem sesjami, powiązaniem nawigacji z routingiem URL i badaniem możliwości wykorzystania XSLT w PHP. System nie jest na razie gotowy do udostępnienia w jakiejkolwiek sensownej postaci. Sorry 🙂
I… wszystko zostało wyrzucone do kosza po raz piąty. Musi być JQuery. Po prostu.