鑑於我有一個模型,表示城市其中包含街道集合。嵌套集合的DTO設計注意事項
public class City {
public int Id { get; set; }
public string Name { get; set; }
public IEnumerable<Street> Streets { get; }
}
public class Street {
public int Id { get; }
public string Name { get; }
public IEnumerable<Building> Buildings { get; }
}
如果客戶有興趣所有城市(api/cities/all
),我會回報他全額徵收,這將導致大規模的響應,這取決於數據集的大小。所以我首先想到的僅僅是返回街道ID裏面的街道集合。然而,這種感覺很尷尬,因爲儘管可能對進一步獲取街道很有用,但它們對於客戶端不具有任何有意義的價值(在視圖上填充ID的列表以顯示什麼是沒有意義的街道在城市,不是嗎?)。
我的下一個想法是收集完全溝街道,而是提供一個API端點去取城市的街道:
api/cities/3737/streets
這樣我可以獲取的完整列表街道,但是返回的數據並不包含街道所屬的任何信息。如果我現在的客戶想要顯示街道和城市,他必須進行2次API調用以獲取他需要的信息。
返回這些數據的常用方法是什麼?
事實是,沒有完全正確的方法來做到這一點。您需要決定什麼對您的應用程序性能有好處。一種應用程序的好處對另一個應用程序不利。 –