gpt4 book ai didi

repository-pattern - 使用 ServiceStack.ORMLite 构建存储库

转载 作者:行者123 更新时间:2023-12-02 06:20:02 25 4
gpt4 key购买 nike

我正在使用 servicestack,并计划将 ormlite 用于数据访问层。我有这些表(SQL Server 2005)

Table ITEM
ID PK
...

Table SUBITEM1
ID PK FK -> ITEM(ID)
...

Table SUBITEM2
ID PK FK -> ITEM(ID)
...

Table POST
ID PK
...

Table COMMENT
ID PK
...

Table DOWNLOAD
ID PK
...

Table POST_COMMENT
ID PK
POST_ID FK -> POST(ID)
COMMENT_ID FK -> COMMENT(ID)

Table DOWNLOAD_COMMENT
ID PK
DOWNLOAD_ID FK -> DOWNLOAD(ID)
COMMENT_ID FK -> COMMENT(ID)

我为每个表创建了一个类并使用注释(自动增量、引用等)映射它们。

我决定为每个“实体”(项目、帖子、评论、下载)创建一个存储库。每个存储库都包含基本的 CRUD 逻辑,

例如。 1 CommentRepository 有一个 Save(Comment comment, Object relationship) 执行 db.Insert(comment, relationship) 其中关系是 PostComment 或 DownloadComment。

例如。 2 PostRepository 有一个 Save(Post p) 执行插入到 POST。

我不确定这个解决方案,因为存储库接口(interface)不同,我不能进行多态查询。

您能提供任何建议来改进我的 DAL 吗?

感谢您的关注。

最佳答案

我不喜欢强制的人工抽象,所以我不喜欢从每个实体的存储库开始,因为它只会导致不必要的代码膨胀。我喜欢从只为所有实体封装所有数据访问的 1 个存储库开始,并在它变得太大时自然重构。

我对您的领域了解不多,不知道什么是最好的 RDBMS 布局,但我也希望尽可能避免创建不必要的表,并会查看 blob 非聚合根数据,例如如果 SubItem 只能应用并且在其父项的上下文之外没有意义,那么我只是将它保存几个表,例如:

class Item {
int Id; //PK, AutoIncr
List<SubItem> SubItem;
}

而不是单独的 Many : Many 表,我只会在单个 Comment 表上维护它,例如:

class Comment {
int Id; //PK, AutoIncr
string CommentType; //i.e. Post or Download
int RefId;
string Comment;
}

因此我的存储库将模仿完成 Web 请求所需的数据访问模式,例如:

class BlogRepository {
void AddCommentToPost(int postId, Comment comment);
void AddCommentToDownload(int downloadId, Comment comment);
}

关于repository-pattern - 使用 ServiceStack.ORMLite 构建存储库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12732958/

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