有 Campaign Entity,为此,我有 CampaignRepository 具有此功能
- 公共 IList FindAll();
- 公共活动 FindByCampaignNumber(字符串编号);
但现在我想要这个标准 -:
- 查找今天创建的营销活动。
- 查找本月创建的广告活动
- 查找排名前 5 的最新营销活动。
- 查找今年创建的营销活动。
因此,对于所有这些活动过滤器,
我是否为存储库中的每个函数创建单独的函数?
并像这样实施。
获取所有营销活动,然后筛选所需的营销活动,但我不想要所有营销活动。在谷歌搜索时我发现这个解决方案
1: http://russeleast.wordpress.com/2008/09/20/implementing-the-repository-and-finder-patterns/ http://russelleast.wordpress.com/2008/09/20/implementing-the-repository-and-finder-patterns/
有什么方法可以避免多个函数,还是我可以继续为每个过滤器创建单独的函数?
您是否考虑过实施规格 http://en.wikipedia.org/wiki/Specification_pattern您的应用程序中的模式?也许它看起来有点大材小用,但如果您的应用程序有一些复杂的用户过滤器选项,它可能会很有用。
class CampaignSpecification
{
public CampaignSpecification Number(string number);
public CampaignSpecification DateBetween(DateTime from, date to);
public CampaignSpecification Year(DateTime year);
} //I have omitted all the AND/OR stuff it can be easily implemented with any SQL like query language
这是从存储库加载的示例
var campaignList = CampaignRepository.load(
new CampaignSpec()
.Number("2")
.Year(DateTime.Now);
另外我想补充一点,这在很大程度上取决于您使用的数据访问解决方案类型,当您知道将使用哪种 API(Criteria API、SQL 或其他)时,它会使实施变得更容易,这样您就可以调整您的规范接口使其实现更简单。
UPDATE:如果您使用 linq 和 nHibernate 在 .NET 中实现规范,请查看http://linqspecs.codeplex.com/ http://linqspecs.codeplex.com/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)