【问题标题】:Building a Repository using ServiceStack.ORMLite使用 ServiceStack.ORMLite 构建存储库
【发布时间】:2012-10-04 17:54:40
【问题描述】:

我正在使用 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 中。

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

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

感谢您的关注。

【问题讨论】:

    标签: repository-pattern servicestack ormlite-servicestack


    【解决方案1】:

    我不喜欢强制人工抽象,所以我不喜欢从每个实体的存储库开始,因为它只会导致不必要的代码膨胀。我喜欢从 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);
    }
    

    【讨论】:

    • 嗨,mythz,非常感谢您的回答。
    • 嗨,mythz,非常感谢您的回答。我可以按照您的建议修改发布、下载和评论之间的多对多关系,但我无法修改项目/子项目层次结构。 SubItem1 和 SubItem2 是 Item 的子类,我不能使用 blob 数据,因为有填充这些表的触发器。
    • @mythz 我真的同意你不喜欢人工抽象,尤其是存储库到实体的一对一映射。更喜欢有机增长
    猜你喜欢
    • 2013-02-04
    • 2014-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-12
    • 2017-05-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多