我想我使用太多的方法,因爲一個糟糕的抽象設計。這就是爲什麼我問這個問題,不同於this one和類似的問題,它只關注方法本身的數量。長長的故事,我正在做一個六足動物。我是這樣說的,因爲有一些不尋常的設計考慮因素:你不能隨時改變前進和後退;所以有一些過渡時間。此外,有空閒的時間,那就是沒有行動的時候。伺服轉換有什麼抽象層次?
我重構我的代碼,但要實現這一點,我覺得我創造了很多方法,不應該在最高級的抽象,但低於:
void loop()
{
// Potentiometer
String action = Controller.action();
Serial.println(action);
// Set the spider to the forward start position
if (action == "toForward")
{
Spidey.toForward();
}
// Move the spider forward
else if (action == "forward")
{
Spidey.forward();
}
// Get it to standby position
else if (action == "fromForward")
{
Spidey.fromForward();
}
// MANY MORE METHODS HERE
// Default action (stand by)
else
{
Spidey.idle();
}
delay(10);
}
在這個層面上,只有Spidey.forward();
方法應該是可見的,而不是過渡的方法。 如何設置轉換操作的抽象級別?
我的選擇:
充分利用
Controller
返回另一個參數,「轉型」,將被傳遞給方法被調用。問題:這使代碼過度複雜化。不是使控制器返回
toForward
,forward
和fromForward
的,使它只返回forward
,然後進行Spidey
在內部處理事情(存儲變量lastAction
內Spidey
,而不是將其存儲insdeController
,因爲我現在做)。問題:這會創建更多的私人方法,但根據the question linked,這沒問題。還有其他想法嗎?
控制器在這種情況下是一個電位器,但它可以是任何東西(無線電模塊,加速度計等)。 –
我不會混合電位器位置解碼邏輯和狀態邏輯,所以中間狀態將完全由Spidey處理。 Spidey.setState(targetState)會將presentState與targetState進行比較,如果它們不同,則實現過渡狀態。它還將檢查過渡狀態是否已完成,如果是,則推進當前狀態。 – sj0h