管理内存中数据库关系的模式



不久前,我用C#编写了一个小框架来管理内存中的数据库关系(1到1,1到N)。从那个以后,我重构了一些设计,下面是一个如何使用当前代码的例子:

class A : FrameworkEntity
{
    public static readonly Relationship1To1<A, B> relationship
        = RelationshipManager.Instance.Relate1To1<A, B>();
    public B B
    {
        get { return relationship.GetForward(this); }
        set { relationship.SetForward(this, value); }
    }
    public C Parent
    {
        get { return C.relationship.GetReverse(this); }
    }
}
class B : FrameworkEntity
{
    public A A
    {
        get { return A.relationship.GetReverse(this); }
        set { A.relationship.SetReverse(value, this); }
    }
}
class C : FrameworkEntity
{
    public static readonly Relationship1ToN<C, A> relationship
        = RelationshipManager.Instance.Relate1ToN<C, A>();
    // the implementation will call the RelationshipManager
    // to update the relationship on add/update/delete
    public ICollection<A> Children
    {
        get { return relationship.GetFoward(this); }
    }
}

对我来说,这似乎是使用了具有依赖属性的中介设计模式。有一个中心的单例对象RelationshipManager,用于管理对对象亲属的更改。每个实例通过实例属性访问该静态依赖关系。

有没有其他方法可以做到这一点,而不使用依赖属性?我没有为这个框架设计原始代码,我很好奇其他人怎么会这么做。

Sqlite显然有一个C#包装器,但它看起来确实需要维护。在内存中创建Sqlite数据库似乎是实现这一目标的理想选择(这取决于您试图进行"查询"、"连接"等工作的复杂性),而且它的占地面积很小。

(这可能超出了您想要做的,但实际获得真正的查询/联接支持等可能是值得的)

最新更新