Lokalt interface

Lokalt interface

LOKALT INTERFACE Kodning af lokalt interface i C# – en gennemgang af tankerne og den konkrete kodning af det lokale interface.
 

Der oprettes nyt Windows Forms Projekt.

 

Kodesprog er sat til C# og navngivningen er givet.

 

Der kan vælges OK.

 image017
 

Toolboxen anvendes til at trække komponenter over på formen.

 

Se formens design herunder:

 image018
 

Formen er designet med de komponenter, der skal være til rådighed, herunder combobokse, tekstfelter, knapper, labels og et datagrid til en medarbejderoversigt

 

Der er også lagt nogle ekstra komponenter til at udføre forskellige tests. Disse ekstrakomponenter fjernes ved idriftsætning.

 image019
 

Der kan oprettes en lille lokal Access-database til testformål.

 

Jeg opretter 2 databaser, både i Access og sql, da de skal bruges til forskellige testformål.

 image020
 

Databasens tabeller er angivet her.

 

Man kan se felterne og hvilke primærnøgler, der er valgt.

 image021
 

Der oprettes forbindelse, kommando og dataset.

 

OleDbConnection DBcon = new OleDbConnection(@”Provider=Microsoft.ACE.OLEDB.12.0;

Data Source=C:\MedarbDB.accdb;Persist Security Info=True;”);

 

OleDbCommand DBcom = new OleDbCommand();

MedarbDBDataSet ds = new MedarbDBDataSet();

 

 

Der laves i første omgang en simpel metode til validering af indtastninger i Fornavn, Efternavn, Telefon og Mail er udfyldt.

 

 image022
 

Foregående metode skal senere hen udvides til at teste om indholdet er gyldigt.

 

Her et eksempel på en testmetode med input, der kan teste om eksempelvis fornavn er gyldigt.

 

Det er meningen at der på sigt skal være specifik validering af alt input.

 image023
Oprette Medarbejderinformationer:

Herunder ses et eksempel på en opret medarbejder metode med INSERT INTO sql sætningen.

image024

Senere hen skal al denne kode ligge i sin egen klasse. Koden indsætter en medarbejder i den rigtige tabel i databasen og er indkapslet i undtagelseshåndtering med try/catch samt den simple validering af input.

 

Planen er at der i det videre arbejde skal laves en kodestruktur, der passer ind i driftsmiljøet.

 

 

 

Hente Medarbejderinformationer:

Herunder er koden, der sørger for at hente en medarbejder med sql sætningen SELECT ud fra databasen og sætte informationerne ind i combobokse og tekstfelter.

image025

 

Koden her til højre sørger for god usability.

 

Det giver et godt flow i anvendelsen og går det samme som overstående knap, blot ved et klik på en række i gridviewet.

 

 image026
Slette Medarbejderinformation:

Her er koden til slet knappen, der gør det muligt med sql sætningen DELETE at fjerne en registreret medarbejder fra databasen.

 

 

 image027
Opdatere Medarbejderinformation:

Koden til højre handler om opdater knappen, der gør det muligt med sql sætningen UPDATE at opdatere en registreret medarbejder i databasen.

 

Meget af håndteringen af medarbejderinformationer i databasen gøres via sql.

 

Derfor er det også vigtigt at man har kendskab til sql for at kunne lave operationer op imod databasen.

 

 

 image028
Metoden Fyldgrid bliver anvendt forskellige steder i koden og handler om at hele tiden holde datagridviewet opdateret med de seneste medarbejderinformationer.

 

Bemærk sql sætningen med INNER JOIN, der udtrækker også bynavnet ud fra postnummeret i PostByTabellen.

 image029
 

C# Kodeoptimering og overvejelser over det videre arbejde med det lokale interface

 

Som Larman skriver, er det i sin løsning hensigtsmæssigt at fordele ansvaret og indkapsle sin kode og anvende de såkaldte GRASP (General Responsibility Assignment Software Patterns)  (Larman, 2012), hvilket jeg her har forsøgt.

Således skal koden i form af klasser, der vedrører medarbejderen og Dataobjekterne i en mappe for sig, som jeg kalder DataObjects.

Håndteringen af dataene til og fra databasen skal således indkapsles i en DBHandler-mappe, hvor der er et interface, der både kan håndtere en sql og Access database.

Alt hvad der handler om gui skal ligge i mappen Graphical, hvor alle forms mv kommer til at ligge.

Valideringen skal således også lægges i en klasse for sig kaldet Validator.cs.

Forfatteren Gomaa er desuden og stor fortaler for at håndtere arkitekturen i sit system på en måde, der tilbyder fleksibilitet og en mere service orienteret arkitektur SOA.

Gomaa vil betegne dette system som et subsystem, hvilket jeg er enig med ham i og han vil sandsynligvis også nikke anerkendende til at man mine overvejelser om de såkaldte Wrapper-classes og interfaces i sin arkitektur (hnv. side 266 & 206) i (Gomaa, 2011).

 image030
 

Mine overvejelser går således på at lave en Handler-klasse (Wrapperclass), et interface og pt 2 serviceklasser, der kan håndtere alle kald til og fra databasen og arbejde med pt to typer databaser en sql og en Access.

Se kodeeksemplerne og overvejelserne i det følende.

Anvende enums til at skelne imellem flere databasetyper og gøre koden mere fleksibel og sigende:

image031

 

 

 

 

Oprette et interface med 2 centrale operationer:

image032

 image033
Således illustreres herunder tankerne omkring sammenhængen imellem interfacets operationer og databaseklasserne, der skal håndtere henholdsvis en Access og en sql database. Metoden lever op til både Larmans og Gomaas holdninger til det at udvikle moderne software, der er fleksibel og let at vedligeholde.
 image034
Ideen med metoden RunNonQuery-metoden er at den skal håndtere al kommunikation til databasen. Altså alle sql INSERT INTO, UPDATE & DELETE kald.  image035
Ideen med metoden RunQuery-metoden er at den skal håndtere al kommunikation fra databasen. Altså alle sql SELECT kald.

Begge metoder modtager en sql-streng og RunQuery-metoden returnerer et dataset med resultatet af SELECT-sætningen og RunNonQuery-metoden er en void-metode, der ikke returnerer noget.

 image036
 Delkonklusion på udviklingen af det lokale interface

Jeg har lavet et system, der er kodet i C# med Windows Forms. Systemet kan håndtere de ønsker der har været i relation til registrering af medarbejderinformationer. Jeg har derudover gjort mig nogle overvejelser over hvorledes dette system fremadrettet kan optimeres og integreres i driftsmiljøet. Samt forholdt mig i praksis til forfatterne Larman og Gomaas holdninger til udvikling af moderne software.

Det er mit indtryk at designet, arkitekturen og fundamentet for det videre arbejde er på plads.

Skriv et svar

Luk menu