2012-10-18 36 views
2

在我的项目中有一个文档管理系统。有一个基类Document类和一些派生类。还有一个管理文档的打开/关闭/激活操作的类。FooManager调用Foo.OnSthHappened()是一个糟糕的做法吗?

Document及其派生类可能希望在被加载到做一些事情,关闭等,但状态变化是由管理器类的控制,所以目前有(虚拟)的方法,如OnLoaded()OnClosed()Document类由DocumentManager类调​​用。除了将这些方法暴露给公众似乎没有必要,它工作正常。

另一种设计是使DocumentManager类射击事件和每个Document实例订阅这些事件。恕我直言,它没有造成很大的差异,但引入了内存泄漏的风险。

我有一种感觉:这些都不是“解决方案”,并有针对该问题的最佳实践的权利。请有人赐教我吗?

+1

Manger,Handler等术语没有说明类的功能。应该避免。 –

+0

我不知道我明白这一点。你是说DocumentManager没有描述类的功能,因此它应该被命名为不同的东西? –

回答

2

我的直觉虽然很难确定而不知道项目的具体要求,但您的DocumentManager课程中有逻辑,您可能需要在Document课程的子课程中使用逻辑。

我会想象一个(潜在抽象)Document基类与公共load,closewhatever方法。每个子类将根据其特定要求实施这些方法,以便您可以轻松创建任意数量的Document子类,而无需更改DocumentManager中的逻辑(请参阅polymorphism)。如果这些操作是异步的,您的Document类将派遣事件通知DocumentManager他们已完成。

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

相关问题