我有一個系統,在那裏我有一個household
,其中有一個TVSubscription
建模。這可以是一個digital
,也可以是analog
。OO設計問題
甲user
登錄到SetTopBox
。然後他可以租用Movies
。
因此目前的方案如下:
//Existing instantiated variables in scope
aMovie
aUser
aSetTopBox
//End
--> execute this command:
aUser rent: aVideo on: aSTB
Code:
User>>rent: aVideo on: aSTB
aVideo rentBy: self on: aSTB
Video>>rentBy: aUser on: aSTB
aUser rentActionMovie: self on: aSTB
User>> rentActionMovie: aMovie on: aSTB
aSTB rentActionMovie: aMovie by: self
STB>>rentActionMovie: aMovie by: aUser
(loggedInUser isNil)
ifTrue: [ loggedInUser := aUser.
--Do stuff to charge the movie]
ifFalse: [ -- Show error that user is not logged in]
從技術上講,這是正確的。但我有(對不起,是肛門)這個問題:
我必須要通過aSTB
2種方法調用到最終使用它。需要在此雙重派遣,因爲我有Child
和Adult
,他們可以租AdultMovie
和ChildrensMovie
。因此我使用雙重調度來代替類型檢查(需求)。因此,我想到了以下解決方案:
我可以在aSTB
上存儲currentlyLoggedIn
,並在aSTB
上存儲loggedInOn
。然而,這使得對象指向彼此。
我的直覺告訴我,這是一個不好的氣味。我不確定如何修復它。
理想我願做這樣的事情:
aUser rent: aMovie.
好了,這是一個過程,我採取的分配。我也有過度的工程感覺..我可能會嘗試使用中介來建模關係。 –