簡體   English   中英

Dart - Snackbar 服務 - 全局函數 vs 靜態類函數 vs 單例

[英]Dart - Snackbar service - global function vs static class function vs singleton

我想圍繞第三方包 Snackbar 創建一個包裝器(第三方 Snackbar 簡單地稱為: Get.snackbar(title, body, snackPosition: SnackPosition.BOTTOM); ),以便將我的應用程序與包解耦並且能夠輕松地交換另一個 Snackbar 實現。

我認為出於性能原因,它應該是單例。 我想稱之為VpSnackBar(title, body); 理想情況下。 我找到了如何在 dart 中創建單例(Vp 是我的應用程序前綴,用於標識它是在我的應用程序中創建的):

在這里我創建了這個單身人士

class VpSnackBar {

  VpSnackBar._privateConstructor();

  static final VpSnackBar instance = VpSnackBar._privateConstructor();

  static void show(String title, String body) {
    Get.snackbar(title, body, snackPosition: SnackPosition.BOTTOM);
  }
  
}

我不得不像VpSnackBar.show(title, body);那樣稱呼它VpSnackBar.show(title, body); . 但是我想我是否應該使用靜態方法創建一個簡單的類,該類可以執行此操作,而不會被實例化? 實例化有用嗎?

另一種選擇是使用大寫名稱的全局函數,因此可以像類一樣使用它:

void VpSnackBar(String title, String body) {
  Get.snackbar(title, body, snackPosition: SnackPosition.BOTTOM);
}

這是我知道如何像VpSnackBar(title, body);這樣稱呼它的唯一方法VpSnackBar(title, body); . 這是我首選的稱呼方式。 但是,全局函數是一種不好的做法嗎? 我可以像VpSnackBar(title, body);一樣調用它VpSnackBar(title, body); 沒有全局函數? 哪種方式是最佳實踐?

這樣我就可以安全地應對包的任何潛在更改

你不會以任何方式存在。

  1. 如果包所有者決定在不觸及其原型的情況下完全更改方法內部結構,您仍然會受到這些更改的影響。

  2. 如果包所有者決定以向后不兼容的方式更改方法的原型,其中包含重大更改,您也會受到這些更改的影響。

我認為出於性能原因,它應該是單例。

我看到您在實例化類時沒有運行任何繁重的進程(如 IO),所以我不明白為什么您應該關注性能。 考慮到,對於每個小部件build()調用build()在一秒內發生多次),數百個類被實例化,並且它們不會影響應用程序的性能。

但是,全局函數是一種不好的做法嗎?

一點也不。 您的方法的實際問題是將函數的第一個字母大寫。 這是一個不好的做法,因為它讓正在閱讀的人相信您的函數調用實際上是一個構造函數調用。

哪種方式是最佳實踐?

正如我所說,我什至看不到包裝小吃店的合理動機。 但是撇開這件事不談,您的每個解決方案對我來說似乎都同樣公平(只要您將函數的第一個大寫)。 在這種情況下,您可能想要使用您覺得更舒服的那個。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM