Закон Деметры и путаница с ООП

Я недавно читал и наткнулся на Закон Деметры. Теперь кое-что из того, что я прочитал, имеет смысл, например, разносчик газет никогда не должен иметь возможность рыться в кармане клиентов, хватать бумажник и вынимать деньги. Бумажник - это то, над чем должен иметь контроль покупатель, а не разносчик газет .

Что меня сбивает с толку в законе, возможно, я просто неправильно все это понимаю, так это то, что объединение свойств вместе с иерархией функциональность / информация может быть такой полезной. например .NETs HTTPContext class.

Разве код типа:

If DataTable.Columns.Count >= 0 Then
   DataTable.Columns(0).Caption = "Something"
End If

или

Dim strUserPlatform as string = HttpContext.Current.Request.Browser.Platform.ToString()

или

If NewTerm.StartDate >= NewTerm.AcademicYear.StartDate And 
   NewTerm.EndDate <= NewTerm.AcademicYear.EndDate Then
   ' Valid, subject to further tests.
Else
   ' Not valid.
End If

не нарушает этот закон? Я подумал (возможно, ошибочно) цель ООП отчасти заключалась в предоставлении доступа к связанным классам в красивой иерархической структуре.

Мне нравится, например, идея ссылки на служебный инструментарий, который может использоваться классами страниц, чтобы избежать повторяющиеся задачи, такие как отправка электронных писем и инкапсуляция полезных строковых методов:

Dim strUserInput As String = "London, Paris, New York"
For Each strSearchTerm In Tools.StringManipulation.GetListOfString(strUserInput, ",")
    Dim ThisItem As New SearchTerm
    ThisItem.Text = strSearchTerm 
Next

Любая ясность была бы замечательной ... на данный момент я не могу согласовать, как закон, кажется, изгоняет объединение свойств и методов вместе ... кажется странным, чтобы мне, что нужно пренебречь такой большой властью? Я новичок в ООП, как некоторые из вас уже догадались, поэтому, пожалуйста, не торопитесь :)

5
задан trucker_jim 2 August 2011 в 21:20
поделиться