Mitä on geneerinen ohjelmointi (osa2)?

Mitä on geneerinen ohjelmointi (osa2)?

Edellisessä blogissani kerroin geneerisen ohjelmoinnin perusasioita. Siinä yhteydessä jäi mainitsematta, että Regex-tarkastusta ei kannata käyttää, jos halutaan palvelimelta ulos satoja sivuja sekunnissa.

Seuraavassa vaiheessa lisätään uusi luokka, jolla ladataan dynaamisesti arvojen tarkastusluokkia, joilla voi tsekata esimerkiksi postinumeroita tai sotu-tunnuksia. Arvojen tarkistusluokat voidaan vaihtoehtoisesti joko ladata aina tarvittaessa tai kerätä listalle, josta niitä voidaan käyttää uudelleen.

Kutsuvan koodin ei käännöksen aikana tarvitse tietää tarkistusluokkien toteutusta. Valmiin sovelluksen hakemistoon voidaan myöhemmin kopioida uusia assemblyjä ja metadatan avulla saada ne heti käyttöön.

Metadataan on seuraavassa esimerkissä lisätty luokan namespace, joka tässä esimerkissä on myös sama kuin assemblyn nimi.

Customer (kentän nimi, minimipituus, maksimipituus ja käsittelyluokan nimi)
– Name,1,80,Bloki.Characters
– SosId,1,10,Bloki.SosId
– Account,0,50,Bloki.Account

Alla oleva uusi Plugin-toteutus lataa dynaamisesti luokan metadatan ohjeiden mukaan.

public static class Plugin
{
public static object Load(String metadata)
{
String[] parts = metadata.Split(’,’);
String assemblyName = parts[3].Substring(0, parts[3].IndexOf(’.’));
return Load(assemblyName, parts[3], metadata);
}

public static object Load(String assemblyName, String className, object constructor)
{
Assembly assembly = Assembly.Load(new AssemblyName(assemblyName));
Type classType = assembly.GetType(className);
return Activator.CreateInstance(classType, constructor);
}
}

Sitten lopuksi aiemmin lupaamani testikoodin geneerinen toteutus.

String metadata = ”Name,1,80,Bloki.Characters”;
IVariable variable = (IVariable)Plugin.Load(metadata);
String generic1 = variable.Validate(”Jarmo”);

Muutamalla rivillä koodia on saatu yleinen ratkaisu tiedon tarkastukselle. Määrittelykoodia on niin vähän, että sen toiminnan ymmärtää helposti. Käytännössä alle parikymmentä luokkaa riittää isonkin sovelluksen tarpeisiin. Vanhat luokat voi käyttää uudelleen ja uudet luokat voi hyödyntää vanhojen sovellusten ylläpidossa.

Luokissa voidaan kutsua ulkoisia palveluita. Tästä esimerkkinä voi mainita rekisterinumeron tai postinumeron tarkastuksen.

Voidaan muun muassa hyväksyä erikoisia muotoja helpottamaan päivämäärän syöttöä.
– T = kuluva päivä
– T+2 = ylihuominen
– 3.4 = 3.4.2016 (oletuksena kuluva vuosi)

Seuraavassa blogissa käsittelen uusien ominaisuuksien antamista Variable-luokalle. Ensimmäisessä versiossa on tärkeää, että rajapinta toteutetaan siten, että uudet ominaisuudet eivät jatkossa riko vanhoja versioita.

Mainokset

Vastaa

Täytä tietosi alle tai klikkaa kuvaketta kirjautuaksesi sisään:

WordPress.com-logo

Olet kommentoimassa WordPress.com -tilin nimissä. Log Out /  Muuta )

Google+ photo

Olet kommentoimassa Google+ -tilin nimissä. Log Out /  Muuta )

Twitter-kuva

Olet kommentoimassa Twitter -tilin nimissä. Log Out /  Muuta )

Facebook-kuva

Olet kommentoimassa Facebook -tilin nimissä. Log Out /  Muuta )

Muodostetaan yhteyttä palveluun %s