松散耦合模块初始化的位置

时间:2017-12-03 20:35:30

标签: c++ single-responsibility-principle

请原谅我,如果我的问题已经回答,但我搜索了SO&软件工程并没有找到直接的答案或一些信息,使这一点清楚。

我正在开发一种小型应用程序,简而言之,它连接到Web服务,获取一些数据并根据获取的数据播放一些音乐。我已将应用程序的所有部分分解为不同的“模块接口”,例如“WebServiceInterface”,“ConfigurationInterface”,“SystemTrayInterface”等。 我正处于理解和开始的阶段。在我的应用程序中实现SRP(通常是SOLID)。

现在,所有这些接口&他们的实现在单独的头/源上被打破。所以我的问题的简短版本是: “关于SRP,哪里我应该声明并实例化应用程序启动所需的必要”模块“并使用它们?”

我的意思是,必须有一个地方(main(),一个函数或一个类),其中一些类被声明并初始化为适当的状态,以便应用程序实际启动。我的问题源于SRP声明:

  

每个模块或类都应对软件提供的功能的一部分负责,并且该责任应由类完全封装

但我很困惑,如果不能有一个包含所有声明的单一地方&我的主要模块的实例化,我应该如何启动应用程序?

我看到了这个:https://stackoverflow.com/a/5744241/1044356

  

2个类之间的松散耦合意味着每个类对其他类的内部行为知之甚少。   你可能在属于同一“模块”或“包”的类之间有更高程度的“耦合”,这不是一个坏习惯

这是否意味着我可以拥有一个包装接口的类,这些模块彼此独立并设置它们?这对我来说听起来像是一个GOD课程。

如果需要,我可以提供其他信息以消除任何含糊之处。

1 个答案:

答案 0 :(得分:0)

封装是关于隐藏内部实现细节。 应用程序对象不需要知道Web服务对象如何检索数据,只有当它(应用程序)发出格式正确的请求而没有其他任何错误时它将获得数据作为回报。 意味着如果需要发出此类请求,应用程序无法实例化Web服务。

一些习语(例如pimpl)允许您通过使用遵循私有实现的公共接口来隐藏几乎所有实现细节。使用这样一个习惯用法你的应用程序只知道包装器,甚至无法看到使私有对象工作所需的数据。

这可以采取极端情况,唯一独立的对象(意味着一个对象不属于另一个或至少由另一个拥有)是应用程序对象本身。