我正在我的应用程序中实现一些天真的搜索,搜索将在几种不同的对象类型(客户,约会,活动等)上进行。我正在尝试创建一个具有可搜索类型的界面。我想做的是这样的事情:
public interface ISearchable
{
// Contains the 'at a glance' info from this object
// to show in the search results UI
string SearchDisplay { get; }
// Constructs the various ORM Criteria objects for searching the through
// the numerous fields on the object, excluding ones we don't want values
// from then calls that against the ORM and returns the results
static IEnumerable<ISearchable> Search(string searchFor);
}
我已经在我的一个域模型对象上有一个具体的实现,但我想将它扩展到其他人。
问题很明显:你不能在接口上使用静态方法。是否有其他规定的方法来完成我正在寻找的方法,或者是否有解决方法?
答案 0 :(得分:3)
接口确实指定了对象的行为,而不是类。在这种情况下,我认为一种解决方案是将其分为两个接口:
public interface ISearchDisplayable
{
// Contains the 'at a glance' info from this object
// to show in the search results UI
string SearchDisplay { get; }
}
和
public interface ISearchProvider
{
// Constructs the various ORM Criteria objects for searching the through
// the numerous fields on the object, excluding ones we don't want values
// from then calls that against the ORM and returns the results
IEnumerable<ISearchDisplayable> Search(string searchFor);
}
ISearchProvider
的实例是进行实际搜索的对象,而ISearchDisplayable
对象知道如何在搜索结果屏幕上显示自己。
答案 1 :(得分:0)
我真的不知道C#的解决方案,但根据this question,Java似乎有同样的问题,解决方案只是使用singleton对象。
答案 2 :(得分:0)
看起来您至少需要一个其他类,但理想情况下,每个ISearchable都不需要单独的类。这限制了您对Search()的一个实现;必须编写ISearchable才能适应这种情况。
public class Searcher<T> where T : ISearchable
{
IEnumerable<T> Search(string searchFor);
}