在这种情况下使用Bridge?
问题描述:
我想问你的意见是否在场景中使用Bridge模式是好的。该方案是我们需要开发一个通用搜索用户界面,可以接受不同的搜索参数,并基于这些参数,我们需要调用不同的服务。例如:如果参数是FIN号码和人名,那么我们必须调用PersonService进行搜索。在这种情况下使用Bridge?
为了使类型安全,我正在考虑使用Bridge patter,其中抽象和实现可以独立工作。
执行下面的代码后,我觉得我强迫自己使用这种模式在这种情况下,即使这种模式不能很好地适合这个...
你们有什么觉得?有什么办法可以改变代码来使它更好吗?或者这种模式根本无法用于这种情况?
抽象类SearchEngine公共抽象IList查询(); }
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();
答
如果搜索将始终路由到一个子系统。如何路由模式。
如果搜索结果将为聚合几个子系统。如何聚合模式。