面向抽象编程

Preface

说来惭愧,直到近几天才明白了一点面向对象设计的。给我带来启发的是SOLID中的D,它代表Dependency Inversion(依赖反转)。尽管写/背定义很无聊,但我还是想写一下依赖反转的核心

上层模块不应该依赖下层模块,他们都应该依赖抽象

Talk is cheap, show me the code

最近在写一个音乐电台应用,采用服务端、客户端的方式实现。在服务端,用户可以指定一个路径,程序根据这个路径生成播放列表。

需求

服务器是一个一旦开起来就不会轻易关闭的程序,我希望播放列表能够自动刷新。这样当用户添加或删除了某首音乐后不用重启服务器就可以反映变化。考虑到易用性,应该支持由路径直接生成播放列表。歌曲是有封面等其他信息的,要满足这些信息的可定制化,程序也支持由配置文件指定的播放列表。