Obejrzałem wczoraj keynote Grega Younga zatytułowany 8 lines of Code. Keynote stary (bo Java lambdy już ma) ale ogólnie temat ciekawy. Pokazane w niej jest, jak mając za nadrzędny cel prostotę, powinniśmy/możemy zmienić kod aby był prostszy (duh!) i czytelniejszy. Zgadzam się, że im prostszy kod tym lepszy, niemniej wydaje mi się, że to co pokazał Greg takie nie jest. No bo zobaczmy – kod z którego wyszliśmy jest następujący:

    public class DeactivateInventoryItem
    {
        private readonly ItemRepository repository;
        public DeactivateInventoryItem(ItemRepository repository)
        {
            this.repository = repository;
        }

        public void Deactivate(Guid id, string reason)
        {
            var item = repository.GetById(id);
            item.Deactivate(reason);
            repository.Save(item);
        }
    }

a skończyliśmy na:

        void BootStrap()
        {
            handlers.Add(x => Deactivate(new ItemRepository(),x));
            handlers.Add(x => Reactivate(new ItemRepository(),x));
            handlers.Add(x => CheckIn(new ItemRepository(), new BarService(), x));
        }

I czy rzeczywiście to jest prostsze? Nie wydaje mi się. Koncepcja lambda oraz fixowanie/zamykanie zmiennych jest równie skomplikowana jak przytoczony dynamic proxy. Poza tym przy takim rozwiązaniu zakres zmiennych nie jest od razu jasny. A już na pewno nie dla wspomnianego junior deva.

Dodatkowo przedstawiony przez Greg’a sposób na stworzenie zasięgu PerHttpRequest (()=>new ItemRepository() zamiast new ItemRepository()) jest błędny. Jeśli wywołamy handler’a dwukrotnie – zmienna nie będzie miała oczekiwanego zasięgu. Trzeba o tym wiedzieć i pamiętać, a to powoduje, że w kodzie pojawia się magia, która tak bardzo była negowana.

Trzeba przyznać rację, że kod z atrybutami, na pierwszy rzut oka, nie był jasny. Trzeba odszukać co robią dane atrybuty i się z nimi zapoznać. Jednakże ich liczba i przykład użytych były źle dobrane. No bo kto w swoim kodzie ma atrybut [SwallowExceptions]? Ręka w górę…

Sama prezentacja niesie sporo wartości – warto upraszczać kod. Im go mniej tym mniej potencjalnych miejsc powstania błędu. Warto także wiedzieć jak działa nasz kod i unikać magii. I na koniec jeszcze jedno zdanie z którym się zgadzam w 100%:

“You own all the code in your project”

Dobrze powiedziane i trzeba mieć to na uwadze gdy chcemy użyć nowej biblioteki w naszym projekcie. Jakby ktoś nie widział jeszcze tego keynote’a to polecam.


dotnetomaniak.pl – Najlepsze artykuły dla .NET