复杂度有三个来源:
1、 代码规模:一般就是代码的函数。
2、 实现复杂度:程序员为了理解一个程序从而建立其思维模型并调试该程序的困难程度。
3、 接口复杂度:主要是和用户接口的复杂度,比如用户界面,功能,操作等。
面对上面三个复杂度比较陷入三个陷阱:
1、 manularty(人力尺度)陷阱:主要是为了避免接口复杂度,而把许多底层人物抛给用户。
2、 blivet(硬撑)陷阱:主要是为了避免代码量复杂度,而使用极端晦涩复杂的算法。
3、 adhocity(过专用)陷阱:为了避免实现复杂度,不采用统一但是有些复杂的方案,而对每个问题都编写重复,专用的代码。
接口复杂度和实现复杂度的折中。所谓鱼和熊掌不可兼得,这两者是有冲突的地方。很多时候可以牺牲其中的一种复杂度而获得另一种的简单。有一个问题,就是该牺牲那个复杂度来换取整体的复杂度?
之前看过一篇文章,说到过一种理念:“差既是好”。这种理念强调实现的简单性,可以牺牲接口的简单性。
没有标准答案,重要的是培养斟酌每一种设计的习惯。