我想知道在使用通用存储库模式时,放置特定于类型的函数的最佳位置。
我的通用Repository<T>
有像GetMany()之类的东西的方法,但是哪里是放置特定于Type的函数的最明智的位置?
一个简单的例子就是说,我有一个&#39;用户&#39;类型,我想要一个函数,而不是返回用户的名字/姓氏,并要求我在返回对象集时将它们粘在一起,可以返回FirstName + " " + LastName
作为&#39; Username
&#39 ;.
之前的非存储库模式实现我已经在EF类型上继承了使用的部分类来提供这些扩展方法,但是我很难确定在使用存储库时将这些类型的函数移动到何处。 / p>
任何想法都会有很大的帮助,
干杯,
道格
答案 0 :(得分:4)
下面的链接解释了如何指定选择,而不是扩大通用存储库的合同,常见的技术是将通用存储库子类化以实现特定的存储库
public class CustomerRepository : GenericRepository<Customer>, ICustomerRepository
{
public CustomerRepository(ObjectContext context) : base(context) { }
public IList<Customer> NewlySubscribed()
{
var lastMonth = DateTime.Now.Date.AddMonths(-1);
return GetQuery().Where(c => c.Inserted >= lastMonth)
.ToList();
}
public Customer FindByName(string firstname, string lastname)
{
return GetQuery().Where(c => c.Firstname == firstname && c.Lastname == lastname).FirstOrDefault();
}
}
您可以将您的功能添加为NewlySubscribed()
答案 1 :(得分:3)
我创建了类似的东西,但我所有类型特定的东西都在源自Repository<T>
的子类中。通用的东西应该保持通用。类型特定的东西成为一个打字的回购。