拥有一个包含指向大多数对象的指针并通过它引用对象的类是不好的做法吗?
Posted
技术标签:
【中文标题】拥有一个包含指向大多数对象的指针并通过它引用对象的类是不好的做法吗?【英文标题】:Is it bad practice to have a class that holds pointers to most of the objects, and reference object through it? 【发布时间】:2010-12-26 21:35:18 【问题描述】:我正在进行我的第一个更大的项目,其中包含很多组件。当我遇到需要在不同类的多个对象之间进行通信时,我决定创建一个 State 类,它保存指向所有重要对象的指针,并通过构造函数将它传递给每个新对象。所以要访问对象,我总是去 state.object.method();我还使用它在同时运行时通过两个状态对象将服务器与客户端分开。
所以,由于我不是专家级程序员(还 :)),而且我非常关心事物程序的结构,并以“正确”的方式构建它,我还没有在任何地方看到过这种情况别的。这是一个体面的结构吗?还是有一些我还没有看到的问题?我没有以正确的OO方式思考吗?
如果这是一种可行的方法,我猜这个洞问题会变得主观,不应该在这里讨论。如果是这样,我很抱歉。
-担心结构的程序员。 (如果他觉得代码变得丑陋,谁能熬夜,尝试重组)
【问题讨论】:
【参考方案1】:最好使用依赖注入,其中每个类都传递它所依赖的所有对象。对于通知/发布情况,您可以使用观察者模式或侦听器模式,其中组件将数据发布到代理,并且侦听器侦听该数据。使用这两个模型,您应该能够将您的状态减少到少于 6 个对象或将其完全删除。
【讨论】:
【参考方案2】:您创建了一种管理器对象,它通过管理对象集合来处理应用程序的“状态”。
对此管理器的引用(在您的应用程序中接近单例)被传递给您的应用程序对象的构造函数。这创建了一种带有扭曲的依赖注入,即通过额外的间接使用来检索实际的依赖。
我想说这是否是一个好的设计很大程度上取决于您的应用程序模型。我会使用 getter 方法而不是公共成员来检索引用,让您可以选择按需创建。
如果您的应用程序的引用从构建开始就稳定(即您的管理器保留的对象在应用程序生命周期内不会更改),您可以更改您的类以使用在构建时传递的管理器引用来检索对象引用他们需要使用它们来初始化对象引用属性。
许多最优化的设计取决于您的应用程序所采用的模型。需要注意的是过度静态定义、对象之间的依赖关系的创建、生命周期属性(如按需创建对象与创建应用程序初始化)以及对象之间的引用数量(如果您的管理器引用应用程序中的所有其他对象)错了。)
根据您提供给我们的信息,我不认为您的设计是不好的做法(始终可以对任何代码库进行改进,不要通过不断重构来尝试“完善”您的代码来创建自己的移动目标。 )
【讨论】:
以上是关于拥有一个包含指向大多数对象的指针并通过它引用对象的类是不好的做法吗?的主要内容,如果未能解决你的问题,请参考以下文章
C++,成员函数返回对包含指向 const 对象的指针的向量的 const 引用