Osui silmiin tällainen kirjoitus keväältä 2008, joka kritisoi Drupalin arkkitehtuurivalintoja. Minusta on mielenkiintoista huomata, että vaikka pointit sinällään saattavat olla ihan valiideja, niin ero Drupalin ja joidenkin järkälemäisten Java-enterprise-järjestelmien välillä on ehkä hieman samankaltainen, kuin ero Linuxin ja Windowsin välillä.
Drupalissahan ei ole mitään "System.Data.SqlClient.SqlDataAdapter"-tyyppisiä luokkia, jotka implementoivat "IDbDataAdapter"- ja "IDataAdapter"-rajapintoja, joita sovelluskehittäjä pääsee sitten riemuissaan käyttämään yhdessä "SqlCommandBuildereiden" ja "SqlConnectionStringBuildereiden" ja tuhansien muiden luokkien kanssa. Siinä on vain node_load(), jolla ladataan sisältöä tietokannasta, ja db_query(), jolla tehdään geneerisiä tietokantahakuja. Eikä häpeillä käyttää niitä rinnakkain.
Itseäni tällainen karu yksinkertaisuus miellyttää. Drupal-moduulin koodaaminen edellyttää vain muutaman rivin kirjoittamista vi:llä tekstitiedostoon. Ei tarvitse perustaa joka kerta isoa enterprise-projektia, pohtia design-patterneja ja luoda omaa luokkahierarkiaa. Ei tarvitse luoda hirviötä, jonka ymmärtäminen tai edes virheilmoitusten tulkitseminen edellyttää satojen .NET- tai J2EE-luokkien ja kirjastojen toiminnan tuntemusta.
Olen myös avannut silmäni sille, että OOP-mallien toteuttaminen ei aina edellytä luokkahierarkioita ja objekteja. PHP:ssä objektien sijaan käytetään usein assosiatiivisia arrayta, joita on helppo luoda ja muokata lennossa. Drupalissa taas moduulien ei tarvitse olla rajapintoja toteuttavia luokkia, riittää kun ne ovat tietyllä tavalla nimettyjä funktioita. Monimutkaisen luokkien perimisen ja ylikuormittamisen sijaan Drupal käyttää esimerkiksi Form APIa ja Node APIa, joilla moduulit voivat muokata toistensa toiminnallisuutta.
Ymmärrän täysin, että tietynlaisia enterprise-ohjelmistosuunnittelijoita tällainen vapaamuotoinen ad hoc -arkkitehtuuri hirvittää. Toisaalta sellaisilta suunnittelijoilta myös helposti hukkuu se yksinkertaisuus ja suoraviivaisuus, jonka pitäisi olla jokaisen järjestelmän pohjana.