• A Philosophy of Software Design读书笔记——模块的接口要通用,实现要深入


    模块设计的两个方式:模块设计的更通用、模块设计的更专用。

    通用模块能够解决更多的问题,也许以后做功能扩展时能够用上,但是通用模块设计比较困难,有可能会过渡设计,所以一部分支持专用设计,如果后续需要支持其他特性,可以把这个模块再重构,然后使得它变得更通用一点。

    模块应该较通用

    作者的建议是在设计时,模块要较通用,即:要完成功能,但是接口不一定要,接口可以设计的较通用一点,来支持较多的功能。较指没必要把模块设计的非常通用。

    例子:文本编辑器

    专用的设计:比如删除,提供两个接口,删除字符、删除范围

    delete(Cursor cursor)、deleteSelection(Selection selection)

    其他的每个操作都提供一个接口,比如换行、复制等,这样设计很专用,但是这种方式不好,提高其他模块的认知负担。

    通用的实际,删除提供一个接口,接口中包括start、end两个位置来标明要删除的范围

    delete(Position start, Position end)。

    换行或者跳转提供change(Position start, Position end)接口

    后者比前者更清晰,也更通用

    通用设计更利于信息隐藏

    问题

    识别出好的设计比自己给出好的设计要简单。

    怎样用最简单的接口实现所有的功能?比如在不减少功能的情况下,能够减少接口数量,那么就是更通用的设计。但是如果为了减少接口数量,但是增加了接口参数,这不一定好(没调用一个方法,必须仔细查看这个方法才有信心正确使用这个方法,这不好)

    每个接口的使用场景是否频繁?能否将某些不太使用的专用接口转换成更通用的接口

    对于当前的需求,目前的API是否足够简单?这个问题能够避免过度设计,使得方法太通用,

  • 相关阅读:
    SLAM从入门到精通(车道线检测)
    AWS认证SAA-C03每日一题
    MQ(二)RabbitMQ快速入门
    光伏发电系统最大功率跟踪控制MATLAB仿真模型(电导增量法+扰动观察法)
    flex布局相关总结&&实现元素框居中效果
    idea使用技巧
    C. Manipulating History
    微服务框架-基于SpringCloudAlibaba的微服务架构
    rdma软件架构的理解。
    数据库MYSQL面试篇(1)
  • 原文地址:https://blog.csdn.net/yh88623131/article/details/127680513