私は最近いくつかの読書をしていて、デメテルの法則に遭遇しました。今、私が読んだもののいくつかは完全に理にかなっています。たとえば、紙の少年は顧客のポケットをライフル銃で撃ち、財布をつかんでお金を取り出すことは決してできないはずです。ウォレットは、ペーパーボーイではなく、顧客が管理する必要があるものです。
法則について私を悩ませているのは、おそらく私は全体を誤解しているだけかもしれませんが、機能/情報の階層と一緒にプロパティを文字列化することは非常に役立つ可能性があるということです。例:.NETsHTTPContextクラス。
次のようなコーディングはしません:
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
この法律を破っていますか?私は(おそらく誤って)OOPのポイントは、部分的には、優れた階層構造で関連するクラスへのアクセスを提供することだと思いました。
たとえば、ページクラスで使用できるユーティリティツールキットを参照して、メールの送信や便利な文字列メソッドのカプセル化などの反復的なタスクを回避するというアイデアが好きです。
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
どんな明快さも素晴らしいでしょう...現時点では、法律が文字列のプロパティとメソッドを一緒に追放するように見える方法を調整することはできません...あまりにも多くの力を無視する必要があるのは私には奇妙に思えますか?ご想像のとおり、私はOOPにかなり慣れていないので、簡単に行ってください:)