代码之家  ›  专栏  ›  技术社区  ›  Michael Sync

在这个场景中使用Bridge?

  •  0
  • Michael Sync  · 技术社区  · 17 年前

    我想问一下您的意见,在场景中使用桥接模式是否好。我们需要开发一个通用的搜索UI,它可以接受不同的搜索参数,并根据这些参数调用不同的服务。例如:如果参数是FIN number和人名,那么我们必须调用PersonService进行搜索。

    为了使类型安全,我考虑使用桥接模式,在这里抽象和实现可以独立工作。

    在实现了下面的代码之后,我觉得我在强迫自己在这个场景中使用这个模式,即使这个模式不适合这个场景。。。

    你们怎么看?有没有办法改变代码使其更好?或者这种模式根本不能用于这种情况?

    抽象类搜索引擎{ 公共抽象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();
    
    1 回复  |  直到 17 年前
        1
  •  0
  •   Shiraz Bhaiji    17 年前

    如果搜索总是 路由 到单个子系统。路由模式如何。

    如果搜索结果是 聚合 对于几个子系统。聚合器模式如何。

    推荐文章