研究生雜談-1粗粒度(Coarse-grained)VS細粒度(fine-grained)

Halo輝Go 發表於 2020-09-22

粒度似乎是根據專案模組劃分的細緻程度區分的,一個專案模組(或子模組)分得越多,每個模組(或子模組)越小,負責的工作越細,就說粒度越細,否則為粗粒度。

簡而言之:

粗粒度:模組的功能太過於集中。

細粒度:將一個大的功能分成比較多的子模組。

 

我在一篇論文中讀到這樣的描述:

通常情況下,軟體缺陷預測模型的選擇取決於預測目標,一般,粗粒度軟體模組內的缺陷概率較大,

故對於此類模組而言,預測其是否存在缺陷並不具備實際意義,而應注重對模組中剩餘缺陷數量的預測,從而提高軟體質量。

 

舉例一下細粒度:

1 interface TaskService{
2   public List getTaskById(int id);
3   public List getTaskByName(String name);
4   public List getTaskByAge(int age);
5 
6 }

舉例一下粗粒度:

1 interface TaskService{
2   public List getTask(Person person);
3 }

 

粗細粒度沒有明顯的界限,也就沒有一個標準。

粗粒度與細粒度是一個相對的概念,也不是說對所有會涉及到粗粒粒度問題的工作都是一致偏向的。粗粒度和細粒度的區別主要是出於重用的目的。像類的設計,為儘可能重用,所以採用細粒度的設計模式,將一個複雜的類(粗粒度)拆分成高度重用的職責清晰的類(細粒度)。 對於資料庫的設計,原則:儘量減少表的數量與表與表之間的連線,能夠設計成一個表的情況就不需要細分,所以可考慮使用粗粒度的設計方式。

 

資料庫訪問控制的粗細粒度問題:

根據控制物件的粗細程度,訪問控制可分為粗粒度和細粒度兩種 通常把規定訪問整個資料庫表或由基本表匯出的檢視的某個層稱為粗粒度的訪問控制,而細粒度控制則是把安全控制細化到資料庫的行級或列級。