我想问你的意见是否在场景中使用Bridge模式是好的。场景是我们需要开发一个可以接受不同搜索参数的通用搜索UI,并且基于这些参数,我们需要调用不同的服务。例如:如果参数是FIN编号和Person的名称,那么我们将不得不调用PersonService进行搜索。
为了使类型安全,我正在考虑使用Bridge模式,抽象和实现可以独立工作。
在实现下面的代码后,我觉得我强迫自己在这种情况下使用该模式,即使这种模式不适合这个......
你们觉得怎么样?有没有办法改变代码,使其更好?或者这种模式根本不能用于这种情况?
抽象类SearchEngine { public abstract IList Query(); }
class PersonSearchEngine : SearchEngine<Person> {
private DataQuery<Person> dataQuery;
public PersonSearchEngine(DataQuery<Person> dataQuery){
this.dataQuery = dataQuery;
}
public string FIN { set; get; }
public string Name { set; get; }
public override IList<Person> Query() {
return dataQuery.Query(new Person() { FIN = this.FIN, Name = this.Name });
}
}
class LocationSearchEngine : SearchEngine<House> {
private DataQuery<House> dataQuery;
public LocationSearchEngine(DataQuery<House> dataQuery) {
this.dataQuery = dataQuery;
}
public string BlockNumber { set; get; }
public string StreetName { set; get; }
public string HouseNumber { set; get; }
public string PostalCode { set; get; }
public override IList<House> Query() {
return dataQuery.Query(new House() { BlockNumber = this.BlockNumber, StreetName = this.StreetName, HouseNumber = this.HouseNumber, PostalCode = this.PostalCode});
}
}
abstract class DataQuery<T>{
public abstract IList<T> Query(T arg) ;
}
class PersonDataQuery : DataQuery<Person> {
public override IList<Person> Query(Person arg) {
Console.WriteLine("Searching Person.....");
return null;
}
}
class LocationDataQuery : DataQuery<House> {
public override IList<House> Query(House arg) {
Console.WriteLine("Searching Location.....");
return null;
}
}
class Person {
public string FIN { get; set; }
public string Name { get; set; }
}
class House {
public string BlockNumber { set; get; }
public string StreetName { set; get; }
public string HouseNumber { set; get; }
public string PostalCode { set; get; }
}
用法:
SearchEngine<Person> searchEngine = new PersonSearchEngine(new PersonDataQuery());
searchEngine.Query();
Console.ReadKey();
答案 0 :(得分:0)
如果搜索始终路由到单个子系统。路由模式怎么样。
如果多个子系统的搜索结果聚合。聚合器模式怎么样。