如何创建使用各种不同数据库实现的c#接口
本文关键字:数据库 实现 接口 何创建 创建 | 更新日期: 2023-09-27 18:15:56
我正在设计一个在web应用程序中使用的对象模型。
模型包含用户。每个用户都有会话。每个会话包含该会话的记录和事件。我需要做的是持久化数据(看起来像mongodb,或类似)我怎么能保持这个代码作为API到我的数据库,API的消费者将不需要知道它是如何存储的。它会"神奇地"一样工作。
谢谢!
这是我现在使用的设计。
public class User
{
public int id {get; set;}
public DateTime EnrollDate { get; set; }
public string Udid { get; set; }
public string Email { get; set; }
public string UserName { get; set; }
public string Password { get; set; }
public HashSet<Session> Sessions { get; set; }
public HashSet<Session> GetSessions()
{
if (Sessions == null)
{
Sessions = new HashSet<Session>();
}
return Sessions;
}
}
public class Session
{
public string SessionId { get; set; }
public DateTime Time { get; set; }
public JObject Parameters { get; set; }
private List<Event> Events { get; set; }
private List<Record> Records { get; set; }
public List<Event> GetEvents()
{
if (Events == null)
{
Events = new List<Event>();
}
return Events;
}
public List<Record> GetRecords()
{
if (Records == null)
{
Records = new List<Record>();
}
return Records;
}
}
public class Record
{
public Record()
{
RecordId = Guid.NewGuid().ToString();
CreatedAt = DateTime.Now;
}
public string Name { get; set; }
public string RecordId { get; set; }
public DateTime CreatedAt { get; set; }
public DateTime Time { get; set; }
public JObject Data { get; set; }
}
public class Event
{
public Event()
{
EventId = Guid.NewGuid().ToString();
CreatedAt = DateTime.Now;
}
public string EventId { get; set; }
public string Name { get; set; }
public DateTime Time { get; set; }
private DateTime CreatedAt { get; set; }
public JObject Parameters { get; set; }
}
我建议您仔细阅读存储库模式。它允许您在编写代码时不必事先考虑数据访问的具体实现。
我会将这些接口构建到他们自己的程序集中,以及一个存储库接口,该接口定义了使用上面定义的接口从数据存储检索数据的契约。
你的应用程序将使用纯粹的接口定义进行数据访问,你可以使用Unity或类似的工具注入你的存储库和数据对象的具体实现。
这也将有助于单元测试你的代码,因为你可以注入一个测试存储库来测试业务对象,例如