
”Jag hittar själv det grönaste gräset” – S.T. Allion
Som utvecklare koncentrerar man sig på hur applikationen skall fungera i produktion. Ibland glömmer man bort att göra det enkelt att deploja och köra applikationen på sin egen utvecklingsmaskin. När man lägger till ett externt beroende tänker man kanske inte på att kollegorna blir tvungna att göra samma inställningar på sina maskiner som du med möda och besvär gjort på din maskin. Den utvecklare som kanske kommer att få mest problem blir du själv när du försöker sätta upp utvecklingsmiljön på en ny dator.
Ett typiskt externt beroende för en normal webbapplikation är åtkomsten till en databasserver. Om inte databasaccessen är korrekt konfigurerad kommer applikationen att fallera. Den enda ”hjälp” att fixa problemet du får är oftast några hundra raders stacktrace. Felmeddelandena handlar om följdproblem där man själv måste knyta symptomet till rotproblemet.
Men vänta lite, detta är ju ett lösbart problem! Det handlar om att tillämpa en enkel uppsättning regler.
Grundregler för externa beroenden
- Kontrollera vid uppstart om allt är på plats. Om inte, gå vidare till nästa punkt.
- Kan vi automatiskt lösa problemet genom en enkel sökning? Om inte, gå vidare till nästa punkt.
- Mänsklig assistans behövs. Kan vi först reducera antalet potentiella lösningar? I så fall presentera dessa val för användaren. Om det inte är möjligt, gå vidare till nästa punkt.
- Informera tydligt vad applikationen behöver, och hur man normalt sett går tillväga för att göra dessa inställningar.
Låt oss tillämpa dessa regler på beroendet av en databas. Här kommer ett förslag i form av javascriptformaterad pseudokod.
Application.connectToDatabase()
Application.connectToDatabase = function()
{
var db;
var settingsFile = loadSettings();
if (settingsFile && settingsFile.dbSettings.correctlyFormatted())
{
var dbServer = connectToDbServer(settingsFile.dbSettings);
if (!dbServer.connected())
{
dbServer = UserDialog.helpUserStartUpTheDbServer();
}
db = dbServer.getDbForCurrentApplication();
if (!db.isValid())
{
db = UserDialog.helpUserCreateNewDb(dbServer);
settingsFile.saveDbSettings(db);
}
}
else
{
var localDbServer = connectToDbServer(LOCAL_HOST_DB_SETTINGS);
if (localDbServer.connected())
{
db = dbServer.getDbForCurrentApplication();
if (!db.isValid() || !UserDialog.letUserCorfirmDbChoice(db))
{
db = UserDialog.helpUserFindDbServerAndSelectDb();
}
}
else
{
db = UserDialog.helpUserFindDbServerAndSelectDb();
}
settingsFile.saveDbSettings(db);
}
return db;
}
Vänlighet
I koden ovan tillämpar jag grundreglerna rekursivt. Funktionerna i UserDialog hjälper användaren enligt samma regler och principer.
Egentligen är dessa Grundregler för externa beroenden samma som grundreglerna för användbarhet och användarvänlighet. Det handlar bara om att tillämpa dom i lite högre grad än vad som är brukligt. Det finns egentligen inget som säger att databasuppkopplingskoden ovan inte skall vara kvar i produktion. Även vid driftsättning till prod behöver man hjälp ibland. Åtminstone behöver man bra hjälpmeddelanden, inte dåliga felmeddelanden. Var snäll.

