‘C#’ sildiga artiklid

17

Mai

Iluvõtted testidele

Marek Tihkan Kommenteeri

Halloo… testid on ka kood!

Mingil põhjusel arvatakse, et testid on samaväärsed write-only koodiga ning ei kanta erilist hoolt selle üle, et neid tulevikus hallata saaks. Küllaltki kurb on tõdeda pärast ümberstruktureerimist katkiseid teste, millest pole võimalik väga aru saada.

Pakun välja mõned võimalused testide paremaks struktureerimiseks.

Esimest varianti on võimalik kasutada küllaltki lihtsalt olemasolevate testide peal. Kuna testid koosnevad kolemast osast (Arrange, Act, Assert; Given, When, Then), siis võib testi ka selliselt tükkideks jagada. Cucumberi kasutajatele peaks see olema küllaltki tuttav: samalaadselt tuleb kirjeldada ära sammud. Selle pahupooleks võibki sammude haldamine olla, sest test on tükeldatud, kuid ülevaate saab palju kiiremini ning on korduvkasutatav.

Loe edasi »

  • Share/Bookmark

KATEGOORIAD » Arendus

SILDID » , , ,

LOE EDASI »
12

Mai

Iluvõtted koodile IV

Marek Tihkan Kommenteeri

Ilusaks on võimalik ka saada igasuguste maskidega, näiteks näo- või juustemaskiga. Staatiliselt tüübitud keeltes on ka tavaliselt seda silmas peetud ning loodud liidesed. Nende kasutamine teeb ilusamaks ja paindlikumaks ka arhitektuuri.

Liideste abiga saame objektide omavahelist siduvust vähendada. Teavad täpselt nii palju kui vaja. Mida väiksemaks nendega läheme, seda rohkem anname teada kavatusest ning ei pea kartma NotSupportedExceptionit.

public interface IConsume<TMessage>
{
  void Consume(TMessage message);
}

public interface ICanMakeCustomerPreferred
{
  void MakePreferred(Cutomer customer);
}

Loe edasi »

  • Share/Bookmark

KATEGOORIAD » Arendus

SILDID » , ,

LOE EDASI »
27

Aprill

Iluvõtted koodile III

Marek Tihkan 2 kommentaari

Toidupoodides tihti võib leida väga huvitavaid teid. Mõned noorendavad, teised salendavad, osa isegi annavad energiat juurde. Üldiselt selliste turundussiltide tõttu tekkib mul tung need järjest prügikasti visata (soovitan pigem minna korralikku tee poodi ja sealt mõned sobilikud teed endale välja valida). Kui prügikast oleks samalaadne nagu tarkvaraarenduse käigus loodud lisamismeetodid kollektsiooni, siis mul läheks ühe paki äraviskamiseks liigselt aega.

public class Teabag
{
  //..
}

public class Trashbin<TTrash>
{
  public void Add(TTrash trash)
  {
    //..
  }
}

var trashbin = new Trashbin<Teabag>();
trashbin.Add(new Teabag());
trashbin.Add(new Teabag());
trashbin.Add(new Teabag());

Loe edasi »

  • Share/Bookmark

KATEGOORIAD » Arendus

SILDID » , ,

LOE EDASI »
7

Sept

Võtame kaalust alla

Marek Tihkan Kommenteeri

PeterPaulRubensPeter Paul Rubensile meeldisid lopsakad naised ja ta maalis neist ilusaid pilte. Kalduvus tüsedusele ei ole tervislik nii elus eneses kui ka objekt-orienteeritud programmeerimises, mistõttu on praegune mood alakaalulisusele. Tihti näeme liideseid, kus pole ühtegi meetodit ja neid võime nimetada tähisteks või alakaalulisteks.

Vastupidine lähenemine on problemaatiline, sest liiga suured meetodi kogumid peidavad endas mitmeid võimalusi muutumiseks, mis teeb ka väljalubatud liidese kergemini purunevaks. Hea näide on .NET raamistikus MembershipProvider, mis näeb välja selline:

Loe edasi »

  • Share/Bookmark

KATEGOORIAD » Arendus

SILDID » , , , ,

LOE EDASI »

Eelmisest veidi parem valideerimise variant tundub olevat kapseldada reeglid ühte eraldiseisvasse klassi. See on hästi kooskõlas ka Single Responibility Principlega.

public class PersonValidator : AbstractValidator<Person>
{
    public PersonValidator()
    {
        RuleFor(x => x.FirstName).NotNull().And.Length(1, 25);
        RuleFor(x => x.LastName).NotNull().And.Length(1, 25);
        RuleFor(x => x.PersonalCode).NotNull().And.Matches("[0-9]{11}");
        RuleFor(x => x.DateOfBirth).NotNull().And.LessThan(DateTime.Today);
        RuleFor(x => x.Age).NotNull().And.GreaterThan(1).And.LessThan(120);
    }
}

Loe edasi »

  • Share/Bookmark

KATEGOORIAD » .NET,Analüüs/Arhitektuur

SILDID » , , ,

LOE EDASI »
27

Aprill

Ruby väärtuslikkus

Marek Tihkan 4 kommentaari

Ruby on küllaltki populaarne keel, kuid Eestis seda väga palju ei kasutata. Siiski selle keele õppimine on väärtuslik tegevus, sest see mõjutab mõttemaailma küllaltki palju.

Rubyt peetakse vägagi loetavaks keeleks ja tõesti ilma süntaksit tundmata võib sellest kenasti aru saada. Üks tore õpetus on Why’s (Poignant) Guide to Ruby, mida lugesin Best Software Writings I raamatust.

products.sort do |a, b|
  a.price <=> b.price
end

Enamik koodi näeb kena ja loetav välja kuigi seal on ka nö säästu funktsioone: to_s.

Loe edasi »

  • Share/Bookmark

KATEGOORIAD » Arendus

SILDID » , ,

LOE EDASI »
23

Aprill

Valideerimine atribuutidega

Marek Tihkan Kommenteeri

Atribuutide kasutamine valideerimiseks tundub paljude jaoks hea mõte olevat. Seda väidet kinnitab selliste raamistikkude rohkesus. Ei saa vastu vaielda, et see on üks lihtsamaid viise, kuid tasuks ka vaadata alternatiive enne kasutamist, sest seegi pole ilma tumeda pooleta.

public class Person
{
    public int Id { get; private set; }

    [Required, Length(Max = 25)]
    public string FirstName { get; set; }

    [Required, Length(Max = 25)]
    public string LastName { get; set; }

    [Required, Pattern("[0-9]{11}")]
    public string PersonalCode { get; set; }

    [Required, PastDate]
    public DateTime DateOfBirth { get; set; }

    [Required, Between(Min = 1, Max = 120)]
    public int Age { get; set; }
}

Loe edasi »

  • Share/Bookmark

KATEGOORIAD » .NET,Analüüs/Arhitektuur

SILDID » , , , , ,

LOE EDASI »
20

Aprill

Millest alustada?

Marek Tihkan 4 kommentaari

Paljud tarkvaraarenduse ettevõtted tegelevad mitme erineva arendussuunaga. Tüüpiliselt on PHP arendus ja lisaks ka mõni staatilise keelega suund nagu Java või C#. Töövestlustest on jäänud mulje, et uus arendaja pannakse algul PHP-d kirjutama ning kui seal piisavalt ennast tõestab, siis on võimalik tal enda karjääris edasiminek teha ning Javat või C# kirjutama hakata. Teile ei tundu see imelik?

PHP on tõesti kergesti omandatav keel, isegi õppisin sellega programmeerimist. Ülikoolis Javat õppides tundus kuidagi imelik, et pean massiivide pikkuse määrama ja ei saa sinna lisada teadmata hulk elemente. Java tundus rangem olevat võrreldes PHP-ga. Massiiv on kindla suurusega elementide hulk, mis asub mälus järjest, mistõttu lugemine käib viitadele struktuuri mahu juurde liitmisega. See teeb massiivide lugemise kiiremaks, kuid ka nende kasutamise rangemaks. PHP-s tundub olevat massiiv Linked List.

Loe edasi »

  • Share/Bookmark

KATEGOORIAD » Arendus

SILDID » , , , , ,

LOE EDASI »
16

Aprill

Võõrastega ei suhelda

Marek Tihkan Kommenteeri

Paljud emad hoiatavad lapsi, et võõrastega suhelda ei tohi. Eriti nendega, kes kommi pakuvad. Ka koodi kirjutamisel on kasulik seda hoiatust arvesse võtta.

Law of Demeter (Principle of Least Knowledge)
Kui objekt A viitab objekt B-le, siis võib A kutsuda B meetodeid, kuid ta peaks hoiduma kutsumast meetodeid objektidel, millele viitab B.

public class Person
{
    public Account Account { get; set; }

    public void Block()
    {
        Account.State = AccountState.Disabled;
    }
}

public class Account
{
    public AccountState State { get; set; }
}

public class AccountState
{
    public static AccountState Disabled
    {
        //...
    }
}

Loe edasi »

  • Share/Bookmark

KATEGOORIAD » Arendus

SILDID » , , ,

LOE EDASI »
28

Jaan

Vaesed inimesed

Marek Tihkan Kommenteeri

Andekad inimesed on tihtipeale tööl vaesed. Nende annet ei lubata piisavalt välja tuua erinevatel põhjustel.

Paljud arendajad juba teavad, et jumal on surnud, kuid ettevõttele, kus töötatakse, ei ole see uudis kohale jõudnud. Seetõttu ei lubata uusi jumalaid kummardada, kuid vaene inimene võib salaja ikka seda teha.
Loe edasi »

  • Share/Bookmark

KATEGOORIAD » Arendus

SILDID » , ,

LOE EDASI »