【问题标题】:Is this a violation of Conceptual Integrity?这是否违反了概念完整性?
【发布时间】:2010-08-07 15:44:38
【问题描述】:

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

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

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

【问题讨论】:

    标签: c# active-directory


    【解决方案1】:

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

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

    【讨论】:

    • 从某种意义上说,这只是退化的情况:大小为零的缓存。
    • 我真的很喜欢访问器方法的类比。 ActiveDirectorConnector 在我看来类似于 public Type Name{get;set;},它验证了它的存在。
    猜你喜欢
    • 2017-06-03
    • 2015-12-27
    • 1970-01-01
    • 2014-02-15
    • 2010-11-29
    • 1970-01-01
    • 2020-01-14
    • 2013-10-09
    相关资源
    最近更新 更多