Wydaje mi się, że mam do czynienia z kilkoma problemami z projektowaniem i nigdy nie wiem, co jest właściwe. Z jednej strony często słyszę, że powinienem ograniczyć łączność i trzymać się jednej odpowiedzialności, ale kiedy to robię, często trudno jest uzyskać do uzyskać informacje do części programu, gdy jest to potrzebne. Dla przykładZasada najlepszych zasad
class Singer
def initialize(name)
@name = name
end
attr :name
end
Następnie powinna być piosenka:
class Song
def new(singer)
@singer = singer
end
end
lub
class Song
def new(singer_name)
@singer_name = singer_name
end
end
Im później ma mniej sprzęgło, więc zgodnie z zasadami powinien go używać. Ale jeśli później odkryję coś w Song, muszę wiedzieć więcej o piosenkarce , jestem w złym stylu. na przykład
class Song
...
def play
puts "Belting it out by #{@singer.name}, winner of
#{@singer.grammy_count} grammies!"
end
end
byłbym w kropce gdybym użył klasy Song, później zamiast dawnej. Ale podejrzewam, że ktoś przypominają mi SRP, zasada jednej odpowiedzialności i sugerują zamiast:
class SongPlayer
def initialize(singer, song)
@singer, @song = singer, song
end
def play
puts "Belting it out by #{@singer.name}, winner of
#{@singer.grammy_count} grammies!"
end
end
I tak, myślę, że to ma sens, ponieważ inny śpiewak może zrobić pokrywę z ktoś inny jest piosenka, prawda? Ale czy naprawdę byłaby to dokładnie ta sama piosenka ? W większości przypadków nigdy nie jest to ta sama "piosenka", więc nigdy nie mam takiego scenariusza, jak . Czy zatem SRP warty dodatkowych zajęć, które przynosi do kodu ?
Czasami myślę, że wiele zasad OOP, SOLIDNYCH lub innych, powstało z powodu ograniczeń języka Java i nie pasuje do Rubiego.