微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

asp.net – 得墨忒耳定律和OOP混淆

我最近一直在做一些阅读并遇到了得墨忒耳法则.现在,我所阅读的一些内容非常有意义,例如:报童应该永远不能通过顾客的口袋,抓住钱包并拿走钱.钱包是客户应该控制的东西,而不是 paperboy.

是什么引发了我关于法律的问题,也许我只是误解了整个事情,将字符串属性功能/信息的层次结合在一起是非常有用的.例如.NETs HTTPContext类.

不会编码如下:

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的新手,所以请放轻松:)

解决方法

德米特法则(也是“函数/方法的德米特定律”)想要通过说“只使用一个点”来减少是因为在一个方法中你不应该从提供的参数中假设这么多的上下文.这增加了类的依赖性并使其不太可测试.

这并不意味着您不能使用上述所有示例,但它建议客户不再使用您的方法访问钱包并从中检索钱:

function getPayment(Customer customer)
{
    Money payment = customer.leftpocket.getWallet().getPayment(100);
    ...
    // do stuff with the payment
}

您只需将paperboy所需的内容传递给方法,并因此减少方法的依赖性(如果可能):

function getPayment(Money money)
{
    // do stuff with the payment
}

您从中获益将是您不依赖于客户将钱包放在左侧口袋中,而只是处理客户给您的钱.这是你必须根据个人情况做出的决定.较少的依赖性使您可以更轻松地进行测试

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐