我试图想出一个通用模型,用于将一些上下文数据与C#中的对象相关联。我建立了一个可以描述如下缓存系统......将上下文数据添加到共享对象
背后的故事 - >缓存是一个单独的实现,提供了“只读”访问经常要求是,我使用自定义的CMS实施的一部分信息为各种asp.net应用程序。我通过我编写的桌面应用程序更新数据,下次Web服务器加载缓存时,我的更改会反映给访问者。 我的缓存遵循以下...
每个对象都有一个唯一的ID
任何对象都可以与任何其他对象通过在关联表中定义的ID映射相关
无论存在多少个与特定对象的关联,只有该对象的一个实例被加载到缓存中。
例如...对象A可能会关联到对象C的集合。类似地,对象B也可以关联到对象C的集合。如果有人从对象A的实例请求一个ID为23的对象C,然后从对象B请求一个ID为23的对象C,则它们将得到对象C的相同实例的句柄。
我现在有一些数据添加到图片中,但数据本身不属于对象A,并且它本身不属于对象C.该数据与对象C.
我最初的想法特定对象A的关联信息:保持额外的数据从对象C分开,因为它不属于真正通过自身对象C。在对象A中维护这些信息并允许它在Dictionary中查找。我不喜欢用这种方法访问数据的方式。我宁愿通过对象C或派生类直接访问附加数据,以实现绑定和易用性。
我的第二个想法:从对象C创建一个派生类(称为对象D),它包含附加的上下文数据并提供易于访问的属性。这解决了绑定问题,并为我提供了我一直在寻找的易用性。这种方法的问题是,现在我的对象A引用了对象D的集合,我需要通过复制对象A的全部数据来打破上述模型,以便我可以附加一些额外的关联信息。
我真的想是继续具有对给定id只有一个对象C的实例,并追加了可以在适当的情况下很容易地访问一些上下文数据和属性。这可以做到吗?我也打开这里的任何其他建议!我希望我的解决方案具有通用性和可靠性,所以我可以将它忘掉,并且不需要经常回头寻找更好的解决方案。
您如何看待'只有该对象的一个实例'?例如,五个列表都添加了同一个对象,并且有五个列表引用,但实际上“只有一个实例”。我们认为一样吗? – 2013-04-26 19:47:09
@KenKin是的。如果高速缓存正在加载,并且有五个列表,每个请求添加同一个对象...第一次遇到该对象时,它将从数据库加载。对于以下四个列表,请求不会触及数据库,而是添加对现有实例的引用。 – lpdev 2013-04-26 21:07:04
好的。但似乎你只是想为数据库创建一个本地缓存? – 2013-04-26 21:24:49