現在、Rubyの実用的なオブジェクト指向デザインを読んで、シンプルなカタを使って実際に議論しているプリンシパルのいくつかを実践しています。Guardの句とSRP(Single Responsibility Principle)
私は次のことを行い方法があります:
def release_bike
capacity_empty_error if empty?
bike
end
これは私のクレードルクラスから(私はバイクのオブジェクトが引数であることを認識しています「バイクのオブジェクトを解放」が、時間のために、私であることをメソッドが自転車のオブジェクトを返すだけでなく、取り外すことができます)。
def capacity_empty_error
raise "Docking Station is empty."
end
そして#empty:
#capacity_empty_errorは、次のでしょうか?自転車は私のインスタンス変数@bikeのラッパーメソッドである
def empty?
bike == nil
end
:のように見えます。したがって、DockingStationクラスの現在の容量は、#bikeが何かに設定されているときにコードがいっぱいであると仮定しているので、1です(後で適切な容量を追加する予定です)。
だから、うまくいけば私のコードについて説明して、質問をしていない場合は改善を提案してください、私が聞きたい質問は次のとおりです。
私は#release_bikeでガード句ラインと感じている:
capacity_empty_error if empty?
はその方法の責任の1つであり、次の行にあるbike
の返信は2番目の責任です。 Tisは明らかにSRPを壊しますが、既存のメソッドに2番目の責任として追加する以外はガード句を使用する方法はわかりません。
できますか?他の人はどのようにそれを達成しましたか
私はこのように見ています。「release_bike」の契約は「私は自転車を解放して返します」です。しかし、ラックが空の場合はそれを行うことはできません。 SRPは実際には、メソッドがそのケース自体を処理することを必要とします。このケース自体は、例外を発生させることによって選択します...あなたはそれを別の方法で自由に見ることができます。 –