What is Law of Demeter?

前端 未结 3 1077
慢半拍i
慢半拍i 2021-02-20 10:05

Let\'s start with Wikipedia:

More formally, the Law of Demeter for functions requires that a method m of an object O may

3条回答
  •  时光说笑
    2021-02-20 10:54

    "Tell don't ask" is a bit different.

    Demeter: don't get something to get something from that to do something on the final thing.

    TDA: don't retrieve "information" from another object to then make a decision on that. Simple example:

    if (someList.size() == 0) { bla
    

    vs.

    if (someList.isEmpty()) { bla
    

    In both cases you are calling a method on some other object; but there is a key difference: the first call exposes "internal" state of that other object to you; on which you then make some decision. Whereas, in the "TDA" improved second version; you leave that "status evaluation" within that other object; thereby somehow reducing coupling.

    But just for the record: that second example still makes a decision based on the state of that list. From that point of view, it is just a slightly better version than option 1. Ideally, you wouldn't need such checks.

提交回复
热议问题