2009-07-15 143 views
0

我想问你的意见是否在场景中使用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(); 

回答

0

如果搜索将始终路由到一个子系统。如何路由模式。

如果搜索结果将为聚合几个子系统。如何聚合模式。