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