Kategorie szkoleń | Egzaminy | Kontakt

Odpowiedzi (3)

  • 0

Odpowiedź najlepiej rozpocząć od definicji wzorca: Mediates between the domain and data mapping layers using a collection-like interface for accessing domain objects. Źródło: http://martinfowler.com/eaaCatalog/repository.html

W uproszczeniu można więc powiedzieć, że wzorzec Repository stanowi warstwę izolującą dane przechowywane w magazynie od ich reprezentacji obiektowej używanej w aplikacji. W praktyce oznacza to, że możemy zamienić warstwę przechowywania/danych bez zmian w pozostałej części systemu, czyli zastosować różne magazyny np. w testach jednostkowych i wydaniu produkcyjnym.

  • Odpowiedział
  • @ | 20.04.2015
  • TRENER ALTKOM AKADEMII
  • 0

Przepraszam, chodzi oczywiście o wzorzec projektowy.

Piotr_Koryciński
  • Odpowiedział
  • @ Piotr_Koryciński | 25.04.2015
    • 12
    • 0
    • 2
  • 0

Przykład wzorca z kodem:

W systemie korzystającym z definicji klasy:

    class Question
    {
        public int Id { get; set; }
        public string Category { get; set; }
    }


Utworzenie interfejsu repozytorium:

    interface IQuestionRepository
    {
        Question GetById(int id);
        IEnumerable<Question> FindByCategory(string category);
    }


Umożliwia skonstruowanie na potrzeby testów jednostkowych uproszczonego repozytorium:

    class InMemoryQuestionRepository:IQuestionRepository
    {
        List<Question> db = new List<Question>{ new Question{ Id=1,Category="color"}, 
                              new Question{ Id=2,Category="design"}};
        public Question GetById(int id)
        {
            return db.FirstOrDefault(q => q.Id == id);
        }
        public IEnumerable<Question> FindByCategory(string category)
        {
            return db.Where(q => q.Category == category);
        }
    }


Dzięki takiemu podejściu możemy uniknąć konfiguracji bazy danych bądź usługi odpowiedzialnej za utrwalanie stanu i odpytywanie magazynu w sytuacji, gdy nie są potrzebne ich implementacje, a wystarczy uproszczona abstrakcja. Dodatkowo, zaletą takiego podejścia jest możliwość zmiany magazynu, np. w sytuacji, gdy system obsługuje przechowywanie lokalne i zdalne (w chmurze).

 

  • Odpowiedział
  • @ | 27.04.2015
  • TRENER ALTKOM AKADEMII