У меня есть функция, которая возвращает заказы за данный период. Я создаю объект Period, который гарантирует, что при указании диапазона дат дата начала равна < = до даты окончания. Аналогично, если речь идет о месячном периоде, даты начала и окончания периода должны быть соответственно в первый и последний дни месяца.OOP/OOD Соединительный вопрос
Мой вопрос заключается в следующем:
Я думал, что в объектно-ориентированных принципах проектирования, сцепление было плохо. Могу ли я ввести связь между классами Order и Period, если класс Order использовал класс Period в качестве параметра в одном из своих методов?
Мое предположение да, но есть преимущества этого, а именно, когда объекты определены, не нужно выполнять одни и те же проверки проверки параметров каждый раз, когда период передается как параметр для разных методов класса ордеров.
Кроме того, не постоянно ли 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
Определенно согласен ... Отличный ответ. спасибо (я читал об этом так много раз, но, когда вы видите так хорошо продуманный комментарий (почему/когда/подробно), тогда имеет смысл, куда идти в вашем коде. Спасибо Стив. – ramnz