Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Linq到SQL表类设计_C#_Linq To Sql_Oop_Design Patterns - Fatal编程技术网

C# Linq到SQL表类设计

C# Linq到SQL表类设计,c#,linq-to-sql,oop,design-patterns,C#,Linq To Sql,Oop,Design Patterns,我正在为一个有大约75个表的项目使用LINQtoSQL。我们必须保留一个缓存,缓存我们提取的整个表,因为这些实体都是相互关联的,按需提取它们的时间太长了。因此,为了从所有这些表中跟踪所有这些实体,我们有一个类负责维护内存中的表引用。此缓存对象对于75个表引用中的每个表引用都有不同的属性,每个引用都会根据需要缓存其表。例如: private EntityTableReference _reference; public EntityTableReference EntityTableReferen

我正在为一个有大约75个表的项目使用LINQtoSQL。我们必须保留一个缓存,缓存我们提取的整个表,因为这些实体都是相互关联的,按需提取它们的时间太长了。因此,为了从所有这些表中跟踪所有这些实体,我们有一个类负责维护内存中的表引用。此缓存对象对于75个表引用中的每个表引用都有不同的属性,每个引用都会根据需要缓存其表。例如:

private EntityTableReference _reference;
public EntityTableReference EntityTableReference
{
    get
    {
                                            // Caches all entities from the table
        return _reference ?? (_reference = new EntityTableReference(this));
    }
}
现在,我已经看到很多指南说这真的违背了OO的原则。缓存对象不做任何事情,它只提供一个公共对象来传递,这样我们就可以在函数调用中发送一个对缓存对象的引用,而不是对函数需要访问的每个表的引用。这对我们来说效果非常好,我看不出在可维护性、可读性、速度等方面有任何缺点


对这种设计决策有什么批评吗?在这种情况下,违反规则是可以的,因为我们已经评估了优点和缺点,还是我在这里遗漏了一些东西,把自己挖了个洞?

我看到的一个问题是支持并发性。如果许多进程/线程正在访问此对象,则读/写操作可能最终成为瓶颈

我看到的一个问题是对并发性的支持。如果许多进程/线程正在访问此对象,则读/写操作可能最终成为瓶颈

一个非常快速的观察结果是,您可能会采用一种缓存策略,该策略可以感知事务数据和参考数据(即变化非常小)。这种设计不会让我觉得与OO不一致。缓存对象实例化并维护对实体的引用。这似乎是有目的的,也是一个概括的问题。一个非常快速的观察结果是,您可能会采用一种缓存策略,该策略可以感知事务数据和参考数据(即变化非常小)。这种设计不会让我觉得与OO不一致。缓存对象实例化并维护对实体的引用。这似乎是有目的的,是一个封装的问题。没错,在当前的实现中,缓存对象肯定不是线程安全的。在这种情况下,我们的大部分时间都花在从数据库中提取数据上,因此我们最初只使用后台线程来缓存数据。没错,在当前的实现中,缓存对象肯定不是线程安全的。在这种情况下,我们的大部分时间都花在从数据库中提取数据上,因此我们最初只使用后台线程来缓存数据。