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

标签 c# active-directory

我正在构建一个包含多个 Connector 类的应用程序,这些类与各种数据孤岛进行交互。例如,请参阅我之前的一个问题 here .无论如何,就像我的示例中的情况一样,几乎所有这些数据源在访问时都非常耗时,因此每个 Connector 都维护一个缓存以限制访问。对于每个数据竖井,都有一个用于获取数据的 IDataSource 和一个用于缓存的 Connector。通过将 IDataSource 传递到我的 AppFactory 类上的工厂方法来访问 Connector

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

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

最佳答案

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

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

关于c# - 这是否违反了概念完整性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3418783/

相关文章:

c# - 将sql server查询结果发送到局域网内所有计算机

c# - 加密 App.Config 部分并部署到多台机器

c# - 使用 C# 和线程删除大量文件和子文件夹

c# - 从事件目录中获取用户的密码

.net - PowerShell - 如果用户输入凭据,则查询 AD 时出错

time - 寻找好的 FILETIME 转换器

c# - 依赖注入(inject)替代方案

c# - 析构函数与 IDisposable?

Python-ldap 无法成功绑定(bind)

Apache subversion LDAP 组访问 1 个存储库内的每个文件夹