这是违反概念完整性的吗?

时间:2010-08-05 20:12:01

标签: c# active-directory

我正在构建一个具有多个Connector类的应用程序,这些类与各种数据孤岛相连接。例如,请参阅我之前的here问题。无论如何,在我的示例中,几乎所有这些数据源在访问时都是昂贵的,因此每个Connector都维护一个缓存来限制访问。对于每个数据孤岛,都有一个IDataSource来获取数据,还有一个Connector来缓存。通过在Connector课程中将IDataSource传递给工厂方法来访问AppFactory

不幸的是,正好有1 Connector不适合这个模型。 Active Directory silo足够快,不需要缓存,因此不需要ActiveDirectoryConnector,我的AppFactory类也不需要工厂方法。正如我之前所说,在其他情况下,从Connector对象请求数据,该对象只能通过方法调用AppFactory获得IDataSource参数。

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

1 个答案:

答案 0 :(得分:3)

我会说保持你的模型到位,并没有介绍特殊情况处理的复杂性。有一个Connector只是对请求最终数据源转发是完全合理的。你不是在这里向后弯腰,Connector隐喻没有任何根本要求它有一个缓存。缓存只是一种性能优化,Connector概念似乎是一个有用的抽象层,允许您在需要时引入缓存(或其他处理)。

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