【发布时间】:2009-09-30 02:10:10
【问题描述】:
我已经设法将以下 THWorkingMemory 类编程为反模式,即上帝对象。我计划它是一个相当小的类,大约有 20 个方法,但现在它包含了队列处理程序、计时器、线程、回调、powershell 队列回调、事件处理程序、锁处理程序和大约 50 多个方法,即很多。这个类已经变得太大而无法维护,我需要分成更小的类。但是怎么做呢?
THWorkingMemory 类从根本上定义了大约 8 个主要代码块,这将建议 8 个单独的类,但是写入 TreeDictionary 的所有方法都使用 ReaderWriterLockerWrapper。
这里是代码。
interface IWorkingMemory
{
protected CMemory CBase;
protected CMemory CCM { get { .. }
public abtract event ..
public abstract void ExecuteAction(Guid ExecutionGuid, string jim ... ...);
..
..20+ methods, events
}
internal sealed class CMemory
{
public CMemory()
{
CBase=new TreeDictionary<Guid, ExecutionState>(new comparer);
} ..
}
public sealed class ExecutionState
{ // 20+ methods. that act against the treedictionary node }
internal sealed class THWorkingMemory:IWorkingMemory
{
lockStrategy = new ReaderWriterLockerWrapper();
public void ExecuteAction(Guid ExecutionGuid, string jim ... ...)
{
lockStrategy.AcquireWriteLock()
CCM[ExecutionGuid].CreateExecutionState(jim);
lockStrategy.ReleaseWriteLock()
}
2000 lines+ of methods, timers, threading, events, callbacks,
queues processing. powershell script callbacks from ExecutionState, etc.
}
private ReaderWriterLockerWrapper
{
public void AcquireWriteLock(int timeout) {}\n
public void ReleaseWriteLock() {}
}
我查看了有关部分课程的问题,但没有得到很好的记录。 这在这里是有意义的,因为 THWorkingMemory 类中的大多数方法都使用 ReaderWriterLockerWrapper。
拆分 THWorkingMemory 的最佳方式是什么,因此它保留了锁类的准确性,即确保写入树字典不会发生冲突,即写入被锁定。我还查看了嵌套类,它可以作为一种解决方案,但不能像现在一样使用储物柜。
有什么想法吗?
【问题讨论】:
-
Alfred,感谢您修复我的编辑。鲍勃。
标签: design-patterns oop c#-3.0