编程语言
首页 > 编程语言> > 在域和存储库之间共享实用程序对象

在域和存储库之间共享实用程序对象

作者:互联网

我目前正在建立一个使用MySQL数据库的框架.我无法使用实体框架的MySQL实现,因此我试图找出概括搜索和分页功能的最佳方法.

最简单的解决方案是使用带有签名的存储库方法,例如:

IList<Blah> GetSomething(string _query, 
                         int _page, 
                         int _pageSize, 
                         out int _numPages)

但这似乎有点反OOD.

我的想法是用域级别和存储库级别都可以访问的ISearchParameter和IPaging对象创建实用程序dll,这样可以避免在每个域和存储库中重新创建这两个接口以及它们的实现.

public interface ISearchParameters
{
    Direction Direction { get; set; }
    string DirectionField { get; set; }
    string Query { get; set; }
    IList<string> SearchFields { get; set; }
}

public interface IPaging
{
    int CurrentPage { get; set; }
    int PageSize { get; set; }
    int NumberOfPages { get; set; }

    int GetQueryPage();
}

我通常会将DTO从存储库映射到域对象,但是如果两个级别都引用了该实用程序.dll,那么在这两个级别之间传递ISearchParameter对象而不进行映射是否会是个不好的设计?如果是这样,是否有更好的解决方案?

解决方法:

>使用存储库模式可以抽象化您与数据访问层的交互.
>使用“控制反转”容器创建您的存储库,以避免从您的域到数据访问层的引用.
>然后,数据访问可以保留对您的域类或域类工厂的引用-避免使用DTO(遵循DRY原理).
>将界面设计为无状态.跨层(可能成为层)穿越时,请考虑服务而不是对象.这将倾向于更简单的方法.
>避免使用Utility.dll.您实际上只需要在域和数据访问层之间共享存储库接口.您可以将它们放在您的域程序集中,或者最好放在单独的程序集中.

标签:domain-driven-design,repository,c,net,design-patterns
来源: https://codeday.me/bug/20191208/2088443.html