czwartek, 1 maja 2008

[refaktoryzacja] Tworzenie obiektów dla prostych typów danych

Często programiści boją się tworzyć (przynajmniej ja takich spotkałem) małe klasy do obsługi np. kodu pocztowego etc. Niepotrzebnie. Pokażemy to na przykładzie numeru telefonu. Jeśli logika jego obsługi będzie rozmieszczona w różnych klasach, będziemy mieć nie lada problem z zarządzaniem/obsługą/modyfikacją/pielęgnowaniem. Zobrazujmy ten problem:


class Osoba
{
public string NumerTelefonu
{
get
{
// zwraca numer telefonu
}
}
}

class Centrala
{
public string NumerTelefonuBezNumeruKierunkowego
{
get
{
// zwraca numer telefonu bez numeru kierunkowego
}
}
}

class Miejscowosc
{
private Osoba osoba;

public string NumerKierunkowy
{
get
{
// wyciagamy numer kierunkowy z numeru telefonu osoba.NumerTelefonu
}
}
}


Piękny syf w kodzie ;) Ciekawe gdzie teraz byśmy dodali metodę sprawdzającą poprawność numeru telefonu? Żeby uniknąć takich rzeczy wystarczy stworzyć drobną klasę zajmującą się tylko i wyłącznie obsługą tego numeru telefonu. Czyli wszystkie metody dotyczące numeru telefony przemieszczamy do klasy NumerTelefonu:


class NumerTelefonu
{
public NumerTelefonu(string numer)
{
this.numer = numer;
}

private string numer;
public string Numer
{
get
{
// zwraca numer telefonu
}
}

public string NumerTelefonuBezNumeruKierunkowego
{
get
{
// zwraca numer telefonu bez numeru kierunkowego
}
}

public string NumerKierunkowy
{
get
{
// wyciagamy numer kierunkowy z numeru telefonu osoba.NumerTelefonu
}
}

public bool CzyPoprawny
{
get
{
// sprawdzenie czy numer jest poprawny
}
}
}
Teraz mamy wszystko w jednym miejscu. Nie musimy się zastanawiać gdzie umieścić metodę walidującą numer telefonu, oczywiście w ... NumerTelefonu, ale odkrycie ;)

Brak komentarzy: