这个世界就是这样的,充满了矛盾,能找到一个恰当合适的平衡点,那你就是厉害的
所有遇到的矛盾问题,我喜欢从这个世界,这个宇宙中寻求答案,因为这个宇宙是完美的,而人幻想出来的东西却总是充满缺陷的.
马,腿,奔跑.
马是拥有腿这个属性的,也是拥有奔跑这个行为的,而腿拥有奔跑的行为吗?腿拥有的是抬腿和踢腿的行为.马利用腿的抬腿和踢腿的行为,在陆地上构成了奔跑的行为.所以 腿和奔跑两个概念互相之间不应该有直接的联系
即,访问腿应该通过马,访问奔跑也应该通过马
人,坐标,X点
人是拥有坐标属性的,坐标是拥有X,Y,Z等属性的,人拥有X属性吗?即便有,我想那也是坐标属性中的X属性
即访问坐标应该通过人,访问X点应该通过坐标
树,营养,苹果
大树吸收营养,运送给苹果,大树自身是有营养的,自己使用一部分,另一些分配给其他地方,苹果是有营养的,是大树传递过来的,并且两者的营养是不相同的,彼此互相不存在交集的,唯一的相同点就是都是营养,即营养的性质相同.
即,访问营养可以通过大树,也可以通过苹果,得到的结果类型是相同的,但是要明白对象是不同的,要通过大树访问苹果中的营养,也不是不可以的,但是哪种更符合逻辑呢,问问大树"苹果中有多少营养" 还是,问问苹果"你含有多少营养".
城市,汽车厂,汽车
城市有汽车厂,城市有汽车,汽车厂制造汽车.我可以命令城市"制造一辆汽车并加入这座城市",也可以命令汽车厂"制造一辆汽车",然后再告诉城市给这辆车"下户".前者违反了"每个函数只做一件事",后者违反了"只与朋友交谈,不与陌生人交谈",所以我向来讨厌这样那样的规则,具体情况具体分析,自己思考总是会漏洞百出的,所以应该向这个世界学习,贴近这个世界,那么矛盾已经被这个世界解决了,你所遇到的问题就少了.在此例中,显然二者是并存的(不要和我说重复原则),你既可以告诉市长你要求做的这件事,也可以亲历亲为,这是客观存在的,我们只能说一个聪明的人应该学会尽可能的利用时间,能交代别人代劳的就让别人去做,自己去做并非是不能,但却是不明智的,只有这样才是符合这个世界的,至于会导致重复,是的,是有可能的,或许在这个城市你让市长做了,在另外一个城市自己做了,又去了一个城市还是自己做了,相同的目的做了三份,但这样才是符合这个世界的,他的缺点显而易见,他的优点可能是你没有察觉到的.
所以对于Demeter律来说,重要的不是我们用条条框框约束自己,而是怎么做才更自然,更符合这个世界.
综合考虑,Demeter定律还是很好的,只有一种情况不应该使用:
A 的朋友B,B有朋友C,A希望使用C,但是C提供的内容不应该在B中提供,即C表达的概念不应该出现在B中,这个时候A调用C的功能就不需要通过朋友B了,什么情况会造成这种情况呢,目前还没深入了解,但或许是设计问题,或许是真有这种情况。