C# 这是否违反了概念完整性?

C# 这是否违反了概念完整性?,c#,active-directory,C#,Active Directory,我正在用几个连接器类构建一个应用程序,这些连接器类与不同的数据仓库接口。例如,请参阅我前面的一个问题。无论如何,就像我的示例中的情况一样,几乎所有这些数据源在访问时都非常昂贵,因此每个连接器都维护一个缓存以限制访问。对于每个数据思洛存储器,都有一个获取数据的IDataSource,以及一个缓存数据的连接器。通过向myAppFactory类上的工厂方法传递IDataSource来访问连接器 不幸的是,只有1个连接器不适合此型号。Active Directory思洛存储器速度足够快,不需要缓存,因此

我正在用几个连接器类构建一个应用程序,这些连接器类与不同的数据仓库接口。例如,请参阅我前面的一个问题。无论如何,就像我的示例中的情况一样,几乎所有这些数据源在访问时都非常昂贵,因此每个
连接器都维护一个缓存以限制访问。对于每个数据思洛存储器,都有一个获取数据的
IDataSource
,以及一个缓存数据的
连接器。通过向my
AppFactory
类上的工厂方法传递
IDataSource
来访问
连接器

不幸的是,只有1个
连接器不适合此型号。Active Directory思洛存储器速度足够快,不需要缓存,因此不需要使用
ActiveDirectoryConnector
,在我的
AppFactory
类上也不会有工厂方法。如前所述,在其他情况下,数据都是从
连接器
对象请求的,该对象只能通过使用
IDataSource
参数调用
AppFactory
来获取


据我所知,我的选择是拥有一个浅层的
ActiveDirectoryConnector
对象,它直接将请求转发到它的
IActiveDirectoryDataSource
,或者根本没有
ActiveDirectoryConnector
。在前一种情况下,我与我的
连接器的其余部分保持概念上的完整性,但我有一个无用的间接层次。在后者中,我牺牲了概念的完整性来换取直截了当。哪一个危害较小?

我想说的是保持您的模型不变,不要引入特殊情况处理的复杂性。有一个只在请求时转发到最终数据源的
连接器
是完全合理的。在这里,您并没有弯腰向后看,连接器的基本概念并没有要求它具有缓存。缓存只是一种性能优化,
连接器
概念似乎是一个有用的抽象层,允许您在需要时引入缓存(或其他处理)


从概念上讲,这有点类似于通过访问器方法而不是直接使用成员变量来访问对象的成员数据的做法,许多人认为这是一种最佳做法。原因是类似的:如果在客户端和数据之间添加一定程度的间接寻址,它允许您在将来需要访问数据时引入额外的处理或优化。

从某种意义上说,这只是退化的情况:零大小的缓存。我非常喜欢与访问器方法的类比。在我看来,ActiveDirectorConnectionr类似于公共类型名{get;set;},它验证了它的存在。