Puneți modele dolofane la o dietă cu îngrijorări - Signal v

Diferite modele din aplicația dvs. Rails vor împărtăși adesea un set de preocupări transversale. În Basecamp, avem aproape patruzeci de astfel de preocupări cu nume precum Trashable, Searchable, Visible, Movable, Taggable.

îngrijorări

Aceste preocupări încapsulează atât accesul la date, cât și logica domeniului despre o anumită porțiune de responsabilitate. Iată o versiune simplificată a problemei etichetabile:

Această preocupare poate fi apoi amestecată în toate modelele care pot fi etichetate și veți avea un singur loc în care să actualizați logica și să argumentați.

Iată o preocupare similară în care tot ceea ce adăugăm este o metodă cu o singură clasă:

Preocupările sunt, de asemenea, o modalitate utilă de a extrage o felie de model care nu pare a face parte din esența sa (ceea ce este și nu este în esența unui model este o linie fuzzy și o discuție mai lungă) fără a merge complet plictisitoare. Principiul și riscul de a vă bloca inventarul de obiecte.

Iată o preocupare Dropboxed pe care o amestecăm doar în modelul Persoană, care ne permite să redirecționăm ulterior e-mailurile primite pentru a fi de la persoana potrivită:

Acum aceasta nu este cu siguranță singura modalitate de a tăia modele dolofane. Din motive de îngrijorare vizibilă, puteți avea Viewer.visible (current_account.posts, to: current_user) și încapsulați interogarea într-un obiect autonom. Pentru Dropboxed, ai putea avea o clasă autonomă Dropbox.