gpt4 book ai didi

c# - 我对对象持久性库的想法有用吗?

转载 作者:太空狗 更新时间:2023-10-29 21:25:18 26 4
gpt4 key购买 nike

首先,如果这不是提出这个问题的合适场所,我深表歉意,但我不确定还能从哪里获得意见。

我已经创建了 .NET 对象持久性库的早期版本。其特点是:

  • 用于持久化 POCO 的非常简单界面。
  • 主要内容:支持几乎所有可以想到的存储介质。这将是从本地文件系统上的纯文本文件到嵌入式系统(如 SQLite)、任何标准 SQL 服务器(MySQL、postgres、Oracle、SQL Server 等)到各种 NoSQL 数据库(Mongo、Couch、Redis 等)的所有内容。几乎可以为任何东西编写驱动程序,例如,您可以相当轻松地编写驱动程序,其中实际的后备存储可以是 Web 服务。

当我第一次有了这个想法时,我确信它非常棒。我很快创建了一个初始原型(prototype)。现在,我正处于“困难的部分”,我正在讨论连接池、线程安全等问题,并讨论是否尝试为 LINQ 支持 IQueryable 等。我正在仔细研究是否值得开发这个库超出我自己的要求。


这是一个基本的用法示例:

var to1 = new TestObject { id = "fignewton", number = 100, FruitType = FruitType.Apple };

ObjectStore db = new SQLiteObjectStore("d:/objstore.sqlite");
db.Write(to1);
var readback = db.Read<TestObject>("fignewton");

var readmultiple = db.ReadObjects<TestObject>(collectionOfKeys);

现在可用的查询界面如下所示:

var appleQuery = new Query<TestObject>().Eq("FruitType", FruitType.Apple).Gt("number",50);
var results = db.Find<TestObject>(appleQuery);

我还在开发一个替代查询接口(interface),让您只需传入非常类似于 SQL WHERE 子句的内容。显然,在 NET 世界中,支持 IQueryable/表达式树会很棒。

因为该库支持许多具有不同功能的存储介质,所以它使用属性来帮助系统充分利用每个驱动程序。

[TableName("AttributeTest")]
[CompositeIndex("AutoProperty","CreatedOn")]
public class ComplexTypesObject
{
[Id]
public string id;

[QueryableIndexed]
public FruitType FruitType;

public SimpleTypesObject EmbeddedObject;
public string[] Array;
public int AutoProperty { get; set; }
public DateTime CreatedOn = DateTime.Now;
}

所有属性都是可选的,基本上都是关于性能的。在简单的情况下,您不需要它们中的任何一个。

在 SQL 环境中,系统默认会为您创建表和索引,尽管有一个 DbaSafe 选项会阻止系统执行 DDL。

能够通过一行代码将数据从 SQL 引擎迁移到 MongoDB 也很有趣。或者到一个 zip 文件。然后又回来了。

好的,问题:

根本问题是“这有用吗?”是否值得花时间真正打磨,使线程安全或连接池化,编写更好的查询接口(interface),并上传到某个地方?

  • 是否已经有另一个库已经做了类似的事情,即提供一个跨多个数据源(不仅仅是不同种类的 SQL)工作的单一接口(interface)?
  • 它是在解决需要解决的问题,还是其他人已经更好地解决了它?
  • 如果我继续,您将如何尝试让您的项目可见?

显然这不是 ORM 的替代品(它可以与 ORM 共存,并与您的传统 SQL 服务器共存)。我猜它的主要用例是用于简单的持久性,其中 ORM 是矫枉过正的,或者用于 NoSQL 类型的场景并且文档存储类型的接口(interface)更可取。

最佳答案

我的建议:根据自己的需求编写,然后开源。你很快就会发现它是否有市场。而且,作为奖励,您会发现其他人会告诉您哪些部分需要改进;他们很有可能会为您润色。

关于c# - 我对对象持久性库的想法有用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3145831/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com