我正在开发与电影播放相关的应用程序,目前遇到了一些设计问题。
如您所料,我有一个包含文件路径、文件大小等属性的电影类。电影类对电影的内部结构一无所知,也不直接解码电影文件。
为了实现这一点,我还有另一个大类:解码器。此类了解所有电影内部信息,例如持续时间、帧速率等。它还提供从文件中检索视频或音频数据的方法。将解码器分成更小的块没有多大意义,因为解码器使用第三方库,并且需要传递大量 C 指针。为了简化内存管理等,我宁愿避免这种情况。
电影拥有一个具有明确定义接口的解码器,因为解码器本身是使用我的电影类中的策略模式实现的。
Movie ----------------> Decoder (implements interface)
| |
v v
File related variables Movie internals
我想知道这种设计在信息隐藏和 SRP 方面是否良好。所有外部类都知道一部电影有一个带有一堆属性的解码器。让他们只知道有电影不是更好吗?但是电影类会变得非常庞大,并且会有很多只访问解码器属性的存根方法。
任何意见,将不胜感激。
编辑:
我深入研究了 Facade 模式(受@Erik 的回答启发),它看起来像这里的完美匹配。我可以进一步细分 Movie 类,但“外部世界”不需要了解细节以避免复杂性。但是,这将产生一个包含许多方法的 Facade 类。
因此,从外部看它是一个巨大的类,而从内部看它被很好地分成逻辑砖块。那你觉得还可以吗?