假設我們有一個巨大的數值笛卡爾座標列表(5; 3)(1; -9)等。爲了表示oop中的一個點,我創建了一個struct/object(c#):驗證對象/結構沒有失敗
public struct Point
{
public int X, Y { get; }
public Point(int x, int y)
{
// Check if x,y falls within certain boundaries (ex. -1000, 1000)
}
}
這可能是錯誤的我如何使用結構。我猜你通常不會使用構造函數,但這不是重點。
假設我想添加一個1000點的列表,並且不能保證這些座標位於邊界內。簡單地說,如果這個觀點是無效的,就轉到下一個觀點而不失敗,並告知用戶。至於對象,我認爲Point本身應該負責實例化和驗證,但我不確定在這個特定情況下如何處理它。調用者預先檢查x,y將是最簡單的方法,但它不適用,因爲調用者必須處理應駐留在Point中的邏輯。
驗證和處理不正確的座標而不失敗和違反SRP的最合適方法是什麼?
[System.Drawing.Point(https://msdn.microsoft.com/en-us/ library/system.drawing.point(v = vs.110).aspx),不需要重新發明輪子。 – TheLethalCoder
@TheLethalCoder'System.Drawing.Point'是一個可變結構。啊!它應該被絞死乾燥並儘可能深埋;)。就我個人而言,我避免使用'Point',除非我與API交互的API迫使我使用。 – InBetween
@InBetween只是將它作爲替代選項發佈,而不是重新將其重新寫入。但是你的觀點是我評論它的原因,而沒有把它寫成答案 – TheLethalCoder