日期:2014-05-18  浏览次数:20861 次

关于一个抽象类或接口方面的问题
我想实现这样一个功能,在BLL层中
C# code

namespace BLL{
 class A01{
    public List<Model.A01> GetList(int id){ 
    //...
   }
    public Model.A01 GetModel(int id){ 
    //...
   }
 }
 class A02{
    public List<Model.A02> GetList(int id){ 
    //...
   }
    public Model.A02 GetModel(int id){ 
    //...
   }
  }
 class A03{
    public List<Model.A03> GetList(int id){ 
    //...
   }
    public Model.A03 GetModel(int id){ 
    //...
    }
  }
}



我想用接口或者抽象类来做继承,但是由于返回参数类型都不同,请问这个怎么解决呢。



------解决方案--------------------
泛型接口的声明形式如下:

interface 【接口名】<T>

{

【接口体】

}

http://blog.csdn.net/donetren/article/details/6494134
------解决方案--------------------
C# code

namespace BLL{
 class A<T>{
    public List<T> GetList(int id){ 
    //...
   }
    public T GetModel(int id){ 
    //...
   }
 }
 class A01 : A<A01>{ }
 class A02 : A<A02>{ }
 class A03 : A<A03>{ }

}

------解决方案--------------------
参考这个:http://code.google.com/p/dapper-dot-net/
下载它的测试项目,即使运行不起来,你看他写的测试代码就该知道如何使用了。
优美的语法,高效的执行效率,强大的通用性,基于它再进行优化将更加强大。
这里有我的第一版修改介绍和下载:http://blog.csdn.net/qldsrx/article/details/7452346
第二版也完成了,只是没发布,看请款再说,CSDN上面似乎没人关心这方面的东西,让我觉得发布与否变得无意义。
------解决方案--------------------
泛型咯。
------解决方案--------------------
BLL层只是实现抽象分离的一种方式。
把与具体数据访问无关的抽象业务逻辑分离开来,还是很有必要的。
这样,无论数据层还是BLL层都可以独立于对方而分别演化。这才是分层的目的所在。
两者都可以不需要知道对方的存在。而只是使用接口进行通信。

以上LZ的例子,除了使用泛型以外,还可以使用接口。Model中和BLL中都可以用接口:
C# code

public interface IA{
    public List<IA0123> GetList(int id){ 
    //...
    }
    public Model.IA0123 GetModel(int id){ 

} 

public class A01: IA{
....
}