我知道FieldManager在BusinessBase中作为受保护属性公开。为什么PropertyInfoManager的设置方式不一样?根据我的收集,PropertyInfoManger维护一个类型字典和每个Type的PropertyInfo的列表。在BusinessBase中维护一个PropertyInfo列表似乎更容易,类似于FieldManager的工作方式。 PropertyInfoManager中有很多工作要将正在注册的PropertyInfo与它们所属的Type链接起来。
我确信这是有原因的,我只是看不到或理解不够。我只是想了解更多关于CSLA以及为什么事情按照它们的方式构建。
答案 0 :(得分:0)
我可以看到两个主要原因:
1)线程安全 - PropertyInfoManager类基本上是一个围绕Dictionary的静态包装器,它允许您为Type注册PropertyInfo并获取Type的PropertyInfo。它处理锁定以确保螺纹安全。
2)N级撤销 - CSLA的这一特性为存储字段值增加了很多复杂性,受保护的FieldManager负责维护BusinessBase的所有托管支持字段的值。要做到这一点,FieldDataManager类需要访问类型的PropertyInfo,因此在一个地方拥有这些,而不是从BusinessBase传递一些List是一种更好的方法。
在这种情况下,FieldDataManager和PropertyInfoManager类增加了模块性,我确信在设计时会受到关注点分离(SoC)和单一责任原则(SRP)的影响。
我也在学习CLSA,并且这样做已经从框架本身学到了很多关于面向对象设计的知识。我建议The Book并阅读The Source Code以继续了解有关CSLA .Net的更多信息。