FooManager调用Foo.OnSthHappened()是不好的做法?

时间:2012-10-18 18:20:42

标签: oop events design-patterns inheritance

在我的项目中有一个文档管理系统。有一个基类Document类和一些派生类。还有一个DocumentManager类来管理文档的打开/关闭/激活操作。

Document及其派生类可能希望在加载,关闭等时执行某些操作,但状态更改由管理器类控制,因此目前存在({1}}等(虚拟)方法} OnLoaded()OnClosed()类调用的Document类上。它工作正常,除了将这些方法暴露给公众似乎是不必要的。

另一种设计是使DocumentManager类触发事件,并且每个DocumentManager实例都订阅这些事件。恕我直言,它没有产生很大的不同,但引入了内存泄漏的风险。

我有一种直觉,认为这些都不是“解决方案”,并且对这个问题有最佳实践。有人可以开导我吗?

1 个答案:

答案 0 :(得分:2)

我的直觉,虽然在不知道项目的具体要求的情况下很难确定,但是你的DocumentManager课程中的逻辑应该是你Document的子类中的逻辑。 1}} class。

我会想象一个具有公共Documentloadclose方法的(可能是抽象的)whatever基类。每个子类将根据其特定要求实现这些方法,允许您轻松创建任意数量的Document子类,而DocumentManager中的逻辑不需要更改(请参阅polymorphism )。如果这些操作是异步的,那么您的Document类将调度事件以通知DocumentManager它们已完成。

这将使DocumentManagersingle responsibility管理(我假设)其Document个实例的集合。