Warstwa biznesowa – aktywny rekord (Active Record pattern)

Dzisiaj przyszedł czas na pierwszy wzorzec obiektowy – aktywny rekord(AR). Zaczynamy od diagramu klas:

 

image

W przeciwieństwie do poprzednich wzorców, każda klasa definiuje fragment logiki biznesowej. Obiekty klas występują w relacji jeden do jednego względem wierszy w tabeli. Klasa Order będzie zawierała zatem logikę dla konkretnego zamówienia a nie dla zbioru zamówień. Klasy tworzymy zwykle dla każdej tabeli z bazy danych a ich instancje jak już wspomniałem dla każdego przetwarzanego wiersza.

Warto podkreślić, że środowisko .NET wspiera wzorzec aktywny rekord poprzez narzędzia ORM – Entity Framework czy LINQ to SQL. Przykładowa klasa warstwy biznesowej, zaimplementowana za pomocą aktywnego rekordu mogłaby wyglądać następująco:

public class Client
{
    public string FirstName {get;set;}
    public string LastName {get;set;}
    public string Email {get;set;}
    // logika biznesowa
    public int GetSubscriptionLevel()
    {
    }
    public int GetMaxCredit()
    {    
    }    
}

Zalety:

  1. Prosta implementacja,
  2. Solidne wsparcie środowisk programistycznych,
  3. Zapobiega duplikacji logiki biznesowej,
  4. Rozdzielenie problemu biznesowego na obiekty zwiększa czytelność kodu.

Wady:

  1. Rozdrobnienie klas (podobnie jak w przypadku TM),
  2. Wymaga wprowadzenia dodatkowej klasy w celu wyeksponowania danych przez usługę sieciową,
  3. Wzorzec zbyt mocno zorientowany na bazę danych,
  4. W przypadku gdy nie korzystamy z gotowych narzędzi ORM, implementacja wzorca jest bardzo skomplikowana i w takiej sytuacji znacznie lepiej zainteresować się wzorcem Domain Model.

4 thoughts on “Warstwa biznesowa – aktywny rekord (Active Record pattern)”

  1. Było by cudownie gdybyś miał ochotę i chęci dołączać do każdego wzorca przykładową implementacje do odpalenia w VS 🙂 To by było genialne połączenie praktyki(kod) z teoretyką(blog) ;).

  2. Witam, wydaję mi się, że pojawiło się za mało informacji na temat tego wzorca. Po przeczytaniu wiedziałem tyle samo co przed przeczytaniem. Dopiero jak zajrzałem do książki Martina Fowler’a i wtedy wszystko się wyjaśniło. Nie chodzi o przepisywanie książki ale wyciągnięcie tej esencji.

  3. Witam,
    Postaram się podawać więcej szczegółów podczas pisania o następnym wzorcu – Domain Model. Do aktywnego rekordu dodam jeszcze jak można wykorzystać gotowe ORM w projektach.

  4. Ja tez (podpinam sie do: ‘Łukasz’) chcialbym prosic o bardziej rozbudowany kod, albo lepiej przykladowa prosta, aplikacje w VS. Bardzo fajny blog i artykuły, ale po ich przeczytaniu i tak najczesciej musze szukac konkretnych przykladow i zastosowan w tutorialach na innych stronach. Bo na podstawie czesciowego kodu, nie zawsze jestem w stanie zlozyc go w sesnowna calosc. (Nie zebym byl len, ale niekiedy ciezko jest znalesc i gdzie indziej jakies konkrety.)

Leave a Reply

Your email address will not be published.