2009-07-15 145 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

如果搜索將始終路由到一個子系統。如何路由模式。

如果搜索結果將爲聚合幾個子系統。如何聚合模式。