假設我有一大堆方法的類,並且我希望這些方法在配置文件中的某個標誌關閉的情況下基本上不運行。 。遵循什麼樣的設計模式?我想到了有條件的運行方法等黑客行爲(例如Can I conditionally control method calls at runtime with attributes?)。「關閉」一個類的實例的正確設計模式是什麼?
回答
假設兩者之間有一個接口,那麼在這種情況下可以用一個虛擬替換實現。像
interface IFoo
void DoBla()
class DummyFoo : IFoo
void DoBla() {}
class RealFoo : IFoo
void DoBla() {
[some actual code]
}
讓我們保持簡單。沒有模式和所有過度思考恕我直言。如果您不希望方法在標誌關閉時執行任何操作,則不應該調用方法本身。
IF Config.Flag = OFF
DoNothing();
ELSE
CallMethod();
比。
CallMethod() {
IF Config.Flag = OFF
DoNothing();
ELSE
DoSomething();
}
原因,我會在1日一票是因爲你的代碼的讀者知道發生了什麼事情和配置標誌的意義。在後來的情況下,如果他們不知道國旗,他們可能會期望發生什麼事情,並在沒有任何事情發生時感到困惑。
我會對第二個投票,因爲儘管可讀性較差,如果對這些方法進行大量調用,並且確保對方法的所有調用實際上按照期望執行,則會導致更少的代碼膨脹。 – ohmusama
你也有一點。 – niksofteng
評論在這種情況下很重要。這個班級應該記錄清楚,以避免混淆。 – ohmusama
實現此功能的一種相對無痛的方式是使用空條件運算符來使用委託調用。
定義您的代表對於給定的方法:
private Action ConditionalSomeMethod;
private Action<string> ConditionalSomeMethod2;
private void SomeMethod() { }
private void SomeMethod2(String arg) {Console.WriteLine(arg);}
然後根據分配給您的病情代表。
private void SetupConditionalMethods()
{
bool runConditionals = true;
if (runConditionals)
{
ConditionalSomeMethod = SomeMethod;
ConditionalSomeMethod2 = SomeMethod2;
}
else
{
ConditionalSomeMethod = null;
ConditionalSomeMethod2 = null;
}
}
使用空條件運算符的示例用法。
private void DemoIt()
{
ConditionalSomeMethod?.Invoke();
ConditionalSomeMethod2?.Invoke("hello");
}
如果委託爲空,則不調用該方法。
- 1. 關係數據庫設計的正確形式是什麼?
- 2. 什麼是ASP.NET MVC中自定義模板類型的正確設計模式?
- 3. 在openstack上關閉一個實例的過程是什麼?
- 4. 作業隊列的正確mongo模式設計是什麼?
- 5. 在UIViewControllers之間切換的正確設計模式是什麼?
- 6. 什麼是設計這個用例的Django模型的「正確方法」?
- 7. Java |關閉一個類的實例
- 8. 關閉一個類中的SerialPort實例
- 9. 什麼是正確的文檔設計
- 10. 什麼是正確的設計選擇?
- 11. 什麼是正確的設計方法?
- 12. 使用JavaScript設計模式實現的一些示例是什麼?
- 13. 爲什麼JdbcTemplate是模板方法設計模式的一個例子
- 14. 正確的設計模式在運行時更改數據類型實例
- 15. 正確設計一個關閉調用者窗口的命令?
- 16. 確保單個課程實例的正確方法是什麼?
- 17. 使用Ajax數據的設計模式。什麼是正確的方式?
- 18. 設計模式 - 這是什麼模式?
- 19. 要實例化的類的設計模式一旦
- 20. 存儲有關類實例的其他信息的正確方法是什麼?
- 21. 設計模式實例
- 22. C++:什麼是實例化的正確的方式在堆棧中的類
- 23. 正確地關閉編譯器類型的實例變量
- 24. 什麼是正確的模式?
- 25. 什麼是正確的MVC模式?
- 26. F#Seq.next - 什麼是正確的模式?
- 27. 什麼是正確的文本模式?
- 28. 什麼是從Controller實例化IRepository類的正確方法?
- 29. 什麼是實現Viewholder設計模式的最佳方式。
- 30. 什麼是設計'行對'關係的正確方法?
定義「正確」。有可能有多種方式來做到這一點,適合你的方式取決於你的具體情況以及對你來說重要的事情。 – hatchet
這可能會對你的應用感興趣:[空對象模式](https://en.wikipedia.org/wiki/Null_Object_pattern) –