我目前正在构建一个使用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对象会不好?如果是的话,还有更好的解决方案吗?
答案 0 :(得分:3)
答案 1 :(得分:0)
在我看来,这是一个非常合适的解决方案。在我的项目中,我经常使用jqGrid,其中还包括搜索,排序和分页。我使用gridParameters对象(在我的基础结构层中定义),该对象从控制器(UI)传递到业务层和数据层。 这些对象不包含任何业务规则,因此我认为这种方法没有任何问题。