Antisuunnittelumalli
Wikipedia
Suunnittelumalleja voidaan myös esittää antisuunnittelumalleina, jolloin tavoitteena on tunnistaa annetun kuvauksen perusteella jokin ohjelmiston, projektin tai prosessin rakenteessa oleva perustavanlaatuinen ongelma johon antisuunnittelumalli esittää korjausehdotuksen tai tavan vähentää ongelman kriittisyyttä. Teoksen määritelmä antisuunnittelumallin käsitteelle on laajempi kuin Erich Gamman suunnittelumallien käsite, koska se sisältää itse ohjelman arkkitehtuurista riippumattomia ongelmakokonaisuuksia, kuten ongelmat ohjelmistotuotantoprosessissa ja projektin johdossa.
Antisuunnittelumallit ovat joskus hyödyllisempiä kuin varsinaiset suunnittelumallit, koska niiden perusteella kehittäjät voivat löytää sovelluksestaan toteutustapoja joita he eivät ole aikaisemmin ymmärtäneet ongelmallisiksi. Antisuunnittelumallit antavat hyödyllisiä vinkkejä, kun olemassa olevaa ohjelmistoa tulee parantaa tai kehittää edelleen.
[muokkaa] Esimerkkejä antisuunnittelumalleista
- Komiteasuunnittelu (design by commitee): Väärä suunnittelu johtuen yhtenäisen vision puutteesta
- Paisuminen (bloat): Ohjelma kasvaa liian suureksi, siinä on liikaa ominaisuuksia ja sen käyttö kuluttaa liikaa resursseja.
- Kasautuvat ominaisuudet (creeping featuritis): Ohjelmaan lisätään "muutamia pieniä" ominaisuuksia, eikä osata lopettaa ajoissa
- Kauaskantoiset vaikutukset (action at a distance): Muutos yhteen osaan ohjelmaa aiheuttaa ongelmia aivan toisessa, ennalta arvaamattomassa kohdassa ohjelmaa.
- Tahaton kompleksisuus (accidental complexity): Väärä suunnittelu tai ongelman väärin ymmärtäminen lisää ratkaisuun yllättäviä ongelmakohtia.
- Jumalaluokka (god class, god object): Luokka joka tekee tai tietää liian paljon, esimerkiksi toteuttaa suuren osan ohjelmasta. Nämä yhteenkasaumat tulee hajauttaa muihin luokkiin.
- Sisäänkoodaus (hard coding): Asioita, jotka voivat riippua ajoympäristöstä tai käyttäjän valinnoista (esim. tiedostojen nimet), on laitettu ohjelmaan vakioiksi niin, että niitä ei voi tarvittaessa muuttaa, pahimmassa tapauksessa edes helposti.
- Virheiden kätkentä (error hiding): Käyttäjälle ei anneta tietoa tunnistetuista virhetilanteista, eikä anneta mahdollisuutta reagoida niihin.
- Taikanumero (magic number): Ohjelmassa oleva numeroliteraali, jonka merkitys ei avaudu ensisilmäyksellä. Ohjelmakoodin lukija ei esimerkiksi voi helposti tietää, miksi muuttuja alustetaan johonkin tiettyyn arvoon, ellei sitä selitetä kommenteissa.
- Leikkaa ja liimaa -ohjelmointi (cut and paste programming): Ohjelmakoodin kopiointi vastaavanlaisesta edellisestä toteutuksesta ja sen muuttaminen toimimaan tässä nimenomaisessa tapauksessa, sen sijaan että toiminnallisuus toteutettaisiin geneerisenä kirjastona.
- Pyörän keksiminen uudelleen (reinventing the wheel): Olemassa olevaa, toimivaa kirjastoa ei osata tai viitsitä hyödyntää.
[muokkaa] Lähteet
- William Brown et al., AntiPatterns – Refactoring Software, Architectures, and Projects in Crisis. John Wiley & Sons. Inc., 1998.