2010-08-05 30 views
2

我正在构建一个包含多个Connector类的应用程序,这些类与不同的数据孤岛交互。例如,请参阅我的早期问题here。无论如何,就像我的例子一样,几乎所有这些数据源在访问时都是昂贵的,因此每个Connector都维护一个缓存来限制访问。对于每个数据筒仓,都有一个提取数据的IDataSource,以及一个缓存的ConnectorConnector是通过在我的AppFactory类中传递IDataSource到工厂方法来访问的。这是否违反了概念完整性?

不幸的是,正是1 Connector不适合这种模式。活动目录筒仓速度足够快,不需要缓存,所以不需要ActiveDirectoryConnector,我的AppFactory类也不会有工厂方法。正如我之前所说的,在其他任何情况下,都会从Connector对象请求数据,只能通过IDataSource参数从方法调用获得AppFactory

据我所知,我的选择是有一个浅ActiveDirectoryConnector对象,只是将请求直接转发到它的IActiveDirectoryDataSource,或根本没有ActiveDirectoryConnector。在前一种情况下,我保持概念完整性与我的其余部分Connector s,但我有一个无用的间接水平。在后者中,我牺牲了直接性的概念完整性。哪一个是较小的邪恶?

回答

3

我要说守在原地模型并没有引进的特殊情况处理的复杂性。有一个Connector只是将请求转发给最终的数据源是完全合理的。你不会在这里向后弯腰,暗示Connector隐喻的基本要求它有一个缓存。缓存只是性能优化,Connector概念似乎是一个有用的抽象层,允许您在需要时引入缓存(或其他处理)。

在概念上,这是有点类似于通过存取器方法访问成员数据为对象,而不是直接使用成员变量,它被许多人认为最好的做法的做法。原因与此类似:如果在客户端和数据之间添加一个间接级别,则可以在将来需要访问数据时引入其他处理或优化。

+1

从某种意义上说,它只是简单的情况:零大小的缓存。 – 2010-08-05 20:46:20

+0

我真的很喜欢类似于访问器方法。 ActiveDirectorConnector与公众类型名称{get; set;}类似,它验证了它的存在。 – DonaldRay 2010-08-06 16:55:25

相关问题