Month: July 2015

Kiedy niestety trzeba użyć metody zwracającej ‘void’

Posted on Updated on

Poczatkowo mialem metode która udawała metode “pure” (nie modyfikującą danych wejściowych).

        customerAccounts = UpdateCustomerAccountsWithIssues(customerAccounts);


        private IEnumerable<CustomerAccount> UpdateCustomerAccountsWithIssues(IEnumerable<CustomerAccount> customerAccounts)
        {
            foreach (var customerAccount in customerAccounts)
            {
                customerAccount.IssuesCount = _notificationsService.CountByCustomerAccountId(customerAccount.Id);
            }

            return customerAccounts;
        }

ale jest to gorsze bo tylko zaciemnia to, że w rzeczywistości modyfikujemy dane wejściowe. Tworzenie w tym momencie kopii wszystkich customerAccounts jest zbyt kosztowne i nie jest aż tak niezbędne.

Lepiej więc gdy metoda explicite mówi co robi:

        UpdateCustomerAccountsWithIssues(customerAccounts);


        private void UpdateCustomerAccountsWithIssues(IEnumerable<CustomerAccount> customerAccounts)
        {
            foreach (var customerAccount in customerAccounts)
            {
                customerAccount.IssuesCount = _notificationsService.CountByCustomerAccountId(customerAccount.Id);
            }
        }

AutoFixture – zmniejszenie użycia ‘new’

Posted on

Obiekty powinny być tworzone w Fabrykach. Innymi słowy, nie używamy ‘new’ bezpośrednio. Podobnie powinno być w UnitTestach.

Zamiast:

            var notifications = new[]
            {
                new Notification(),
                new Notification(),
                new Notification(),
                new Notification()
            };

Dostajemy dzięki AutoFixture:

            var fixture = new Fixture();
            var notifications = fixture.CreateMany<Notification>(4);

Protected: Horoskopowe opisy imion – test

Posted on Updated on

This content is password protected. To view it please enter your password below:

CodeReview

Posted on Updated on

Komentarze jakie dostaję gdy odbieram Code Review. Nie wszystkie są ogólne na tyle że pasują wszędzie ale wszystkie warte chwili “zadumy”.

  • Zawsze wasy przy ifach

    jesli jest samo return; to wtedy mozna onliner:

    if(!valid) { return; }
    
  • The verb in method name is missing? This method is names like it was a property.

    int CountByUserId(int userId);
    
  • Id vs identifier

    trzymaj sie jednej koncepcji nazewniczek. Id jest bardziej popularne. Jest też krótsze i nie traci przy tym znaczenia – nie pomyli się z niczym innym.

  • against… use …

    english is important …

  • When you are setting multiple conditions with LINQ it’s better to split them into multiple Where statements (for the sake of easier line breaking at least). Rather than

    jobj.Properties().Any(x => x.Name == "id" && x.Value.Type == JTokenType.Integer)
    

    you could do something like

    jobj.Properties().Where(x => x.Name == "id").Any(x => x.Value.Type == JTokenType.Integer)
    
  • Maybe it’d be better to rename this value to searchQuery or just query?

    Trzeba się upewnić, że wszystkie wystąpienia których Resharper nie wyłapie też są zmienione. Np przejść przez wiele warstw.

  • Use an underscore for irrelevant lambda parameters

    button.Click += (_, __) => HandleClick();
    
  • Use US-English instead of UK-English

  • Add braces around every comparison condition, but don’t add braces around a singular condition. For example if (!string.IsNullOrEmpty(str) && (str != “new”))

AutoFixture scenariusze

Posted on Updated on

var twoUsers = fixture.CreateMany<User>(2);

Porównywanie tego samego pliku na jednym ekranie (split) w Visual Studio

Posted on Updated on

Czasem warto porównać fragmenty kodu będące w tej samej klasie. Do tej opcji wchodzimy poprzez WINDOW->Split, a efekt jest taki:

split in visual studio

Opcja jest trochę trudna do znalezienia. Gdy chciałem ją użyć to szukałem Prawym Przyciskiem Myszy na belce aktualnej klasy. Były tam opcje takie jak “New Horizontal Tab Group”, “New Vertical Tab Group”, które robią podobne rzeczy ale nie pozwalają na oglądanie tego samego pliku side-by-side.

Peek definition

Podobny efekt daje kliknięcie na metodzie “Peek Definition”. Jest otwierane inne okno z definicją zaraz pod interesującą nas metoda. Efekt wygląda tak:

peek definition in visual studio