我有一個函數可以返回給定期間的訂單。我創建了一個Period對象,可以確保在指定日期範圍時,開始日期爲< =到結束日期。同樣,如果處理一個月的時間段,則該時間段的開始日期和結束日期應分別爲該月的第一天和最後一天。OOP/OOD耦合問題
我的問題是這樣的:
我認爲,在面向對象的設計原則,聯軸器是壞的。我是否通過讓Order類在其方法之一中使用Period類作爲參數來引入Order和Period類之間的耦合?
我的猜測是肯定的,但這樣做的好處是,即一旦定義了對象,就不必每次將句點作爲參數傳遞給不同的方法時都執行相同的參數驗證檢查Orders類。
此外,Microsoft是否不經常將一種類型的非內在對象傳遞給其他對象?
避免耦合聽起來像避免重複使用我,這是面向對象應該促進。這聽起來像是相互競爭的目標。
有人可以澄清。
Public Class Order
Public Shared Function GetOrders(ByVal customerId As Integer,
ByVal forPeriod As Period) As Orders
**'Should the param object MonthPeriod be replaced with 2 date params?
'Would I be "reducing coupling" by doing so, a good thing.**
End Function
End Class
Public Class Period
Property FromDate As Date
Property ToDate As Date
Public Sub New(ByVal fromDate As Date, ByVal toDate As Date)
If fromDate > ToDate Then
Throw New ArgumentException("fromDate must be less than Or equal toDate")
End If
_FromDate = fromDate
_ToDate = toDate
End Sub
End Class
Public Class MonthPeriod : Inherits Period
Public Sub New(ByVal fromDate As Date, ByVal toDate As Date)
MyBase.New(fromdate, toDate)
If fromDate.Date <> New Date(fromDate.Year, fromDate.Month, 1) Then
Throw New ArgumentException("fromDate must be the first day of the month")
End If
If toDate.Date <> New Date(toDate.Year, toDate.Month, Date.DaysInMonth(toDate.Year, toDate.Month)) Then
Throw New ArgumentException("fromDate must be the last day of the month")
End If
End Sub
End Class
優秀的答案。謝謝 – ChadD 2010-10-22 02:08:47
Definetly同意...優秀的答案。謝謝(我多次閱讀這些內容,但是當你看到如此精細的評論時(爲什麼/何時/細節),那麼在你的代碼中應該選擇哪種方式。謝謝史蒂夫。 – ramnz 2012-11-20 17:03:55