Ruby Mixins – Include

7 stycznia 2022
ruby

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.