请原谅我,如果我的问题已经回答,但我搜索了SO&软件工程并没有找到直接的答案或一些信息,使这一点清楚。
我正在开发一种小型应用程序,简而言之,它连接到Web服务,获取一些数据并根据获取的数据播放一些音乐。我已将应用程序的所有部分分解为不同的“模块接口”,例如“WebServiceInterface”,“ConfigurationInterface”,“SystemTrayInterface”等。 我正处于理解和开始的阶段。在我的应用程序中实现SRP(通常是SOLID)。
现在,所有这些接口&他们的实现在单独的头/源上被打破。所以我的问题的简短版本是: “关于SRP,哪里我应该声明并实例化应用程序启动所需的必要”模块“并使用它们?”
我的意思是,必须有一个地方(main(),一个函数或一个类),其中一些类被声明并初始化为适当的状态,以便应用程序实际启动。我的问题源于SRP声明:
每个模块或类都应对软件提供的功能的一部分负责,并且该责任应由类完全封装
但我很困惑,如果不能有一个包含所有声明的单一地方&我的主要模块的实例化,我应该如何启动应用程序?
我看到了这个:https://stackoverflow.com/a/5744241/1044356
2个类之间的松散耦合意味着每个类对其他类的内部行为知之甚少。 你可能在属于同一“模块”或“包”的类之间有更高程度的“耦合”,这不是一个坏习惯
这是否意味着我可以拥有一个包装接口的类,这些模块彼此独立并设置它们?这对我来说听起来像是一个GOD课程。
如果需要,我可以提供其他信息以消除任何含糊之处。
答案 0 :(得分:0)
封装是关于隐藏内部实现细节。 应用程序对象不需要知道Web服务对象如何检索数据,只有当它(应用程序)发出格式正确的请求而没有其他任何错误时它将获得数据作为回报。 不意味着如果需要发出此类请求,应用程序无法实例化Web服务。
一些习语(例如pimpl)允许您通过使用遵循私有实现的公共接口来隐藏几乎所有实现细节。使用这样一个习惯用法你的应用程序只知道包装器,甚至无法看到使私有对象工作所需的数据。
这可以采取极端情况,唯一独立的对象(意味着一个对象不属于另一个或至少由另一个拥有)是应用程序对象本身。