我正在构建一个具有多个Connector
类的应用程序,这些类与各种数据孤岛相连接。例如,请参阅我之前的here问题。无论如何,在我的示例中,几乎所有这些数据源在访问时都是昂贵的,因此每个Connector
都维护一个缓存来限制访问。对于每个数据孤岛,都有一个IDataSource
来获取数据,还有一个Connector
来缓存。通过在Connector
课程中将IDataSource
传递给工厂方法来访问AppFactory
。
不幸的是,正好有1 Connector
不适合这个模型。 Active Directory silo足够快,不需要缓存,因此不需要ActiveDirectoryConnector
,我的AppFactory
类也不需要工厂方法。正如我之前所说,在其他情况下,从Connector
对象请求数据,该对象只能通过方法调用AppFactory
获得IDataSource
参数。
据我所知,我的选择是让一个浅的ActiveDirectoryConnector
对象直接将请求直接转发到IActiveDirectoryDataSource
,或根本没有ActiveDirectoryConnector
。在前一种情况下,我保持与Connector
的其余部分的概念完整性,但我有一个无用的间接级别。在后者中,我牺牲了直接性的概念完整性。哪个是较小的邪恶?
答案 0 :(得分:3)
我会说保持你的模型到位,并没有介绍特殊情况处理的复杂性。有一个Connector
只是对请求最终数据源转发是完全合理的。你不是在这里向后弯腰,Connector
隐喻没有任何根本要求它有一个缓存。缓存只是一种性能优化,Connector
概念似乎是一个有用的抽象层,允许您在需要时引入缓存(或其他处理)。
从概念上讲,这有点类似于通过访问器方法访问对象的成员数据而不是直接使用成员变量的做法,这被许多人认为是最佳实践。其原因类似:如果在客户端和数据之间添加间接级别,则可以在将来需要访问数据时引入其他处理或优化。