oop - Using an object oriented approach in Ruby -
i have 2 classes, class a , class b.
i've noticed share lot of same code. example:
def viewable_by?(user) super || clinic.has_staff_member?(user) || user.system_admin? || self.person == user.person end i want minimize code duplicated between classes. in refactoring, i've found of doesn't fit neatly 1 class falls cleanly in single responsibility principle. want put single module, methods have time formatting, viewing permissions, , few other things.
as see it, have few choices. (and bet can suggest others.) object oriented point of view, approach should go , why?
- use 1 single module shared between both of classes. may not have specific single responsibility, clean code significantly, , keeps in 1 place.
- make tiny classes , mix in both classes modules. have single responsibility, there many of them, of may have 1 method. seems waste.
- perhaps use presenter things time formatting, , permissions module shared between both classes. perhaps "cleaner," methods going everywhere.
- another possibility haven't yet considered?
edit
this question had mentioned clinic::appointment , clinic::visit classes, rather , b. answers may refer appointments , visits.
this neat question because deals in great way overall strucuture of project. understand appointment , visit separated things, , visit don't need linked appointment.
for authorization methods, viewable_by?, recommend move authorizations other place - might want check cancan structure, have worked many rails projects, , work application, coding authorization system yourself. in part, answer use (3).
however, since not code shared 2 classes authorization purposes, try classify set of methods, , give answer each class of methods think of. method classes have similar behavior try encapsulate in module , include (so (1), in smaller parts). example 1 module hasvisitors methods got_on_time? , was_conclusive? (well, maybe not best examples, it). when model has broader scope, authorization, present in of classes, time go (3).
i suggest stop , think again if should have visit class apart appointment , relationship, not now. after got @ home, have fun, take off head, think again next day.
Comments
Post a Comment