Ruby Mixins – Include

Ruby jak każdy język obiektowy opiera się na dziedziczeniu. Ze względu na ograniczenie, w postaci dziedziczenia na raz tylko po jednej klasie twórcy języka zaproponowali mechanizm mixinów – dołączania modułów do klas. Pozwala to programistom na podążanie za dobrymi praktykami stosowania kompozycji zamiast dziedziczenia.

Jednym ze sposobów pozwalających na domieszkę modułu do klasy jest dyrektywa INCLUDE.

Dyrektywa ta sprawia, że moduł zostaje włączony w łańcuch dziedziczenia obiektów tuż przed klasą nadrzędną.

Oznacza to, że kiedy jakaś metoda jest wywoływana na klasie, a nie jest zdefiniowana bezpośrednio w niej, będzie wywołana z includowanego modułu.

Kolejność includowania ma znaczenie. Kaskaduje w dół analogicznie do styli w css. Jeśli kilka includowanych modułów zawiera w sobie metodę o tej samej nazwie, to zostanie wywołana metoda z modułu zaincludowanego jako ostatniego.

Przykładem jest tutaj klasa UserRepository, która ma dołączony MongoHelper i może korzystać z metod zawartych w module, jak z własnych metod klasowych lub instancyjnych.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

You May Also Like
Czytaj

Modyfikator Protected w Ruby

Rozmowy rekrutacyjne, a zwłaszcza ich część techniczna najczęściej przebiegają według jakiegoś określonego schematu. Łatwo przewidzieć pytania, jakie mogą…
Czytaj

Simple Command

Kto kiedykolwiek pracował w projekcie railsowym napewno widział tzw. fat controllers, gdzie logika poszczególnych akcji wpakowana jest bezpośrednio w…
Czytaj

Spread Operator w Ruby i Ruby Ranges

Wszyscy pamiętamy jak rewolucyjne w świecie JavaScriptu okazało sie wprowadzenie tzw. <strong>spread operator</strong> wraz ze standardem ES6. Praca z kolekcjami…
Czytaj

Ruby Mixins – Prepend

Ruby jak każdy język obiektowy opiera się na dziedziczeniu. Ze względu na ograniczenie, w postaci dziedziczenia na raz…
Czytaj

Range i Date w Ruby on Rails

W jednym z poprzednich postów pokazywałem przykład zastosowania obiektu Range w Ruby. Ruby on Rails posiada własne rozszerzenie klasy…