日期:2014-05-17  浏览次数:20927 次

接口应该定义在哪一层?做个大型项目的请进。
书上都说要基于接口进行编程,这点我非常同意。但在实践过程中却遇到了一些问题,希望大伙可以提供专业意见。问题如图所示:



IDBOperation是对数据库操作的接口,该接口供多个业务模块使用,而该接口的实现会有多种方案,并根据不同情况进行替换使用。如图所示,我希望将业务类单独放在一些类库上,而IDBOperation不同的实现方案,也分别放在不同的类库上(因为每种实现方式都需要引用不同的第三方类库,我不希望放在一起)。那么这个IDBOperation接口,应该在定义在哪一个类库上??

第一时间想到亲建一个公共的类库,并且该类库专用于定义接口(可能里面定义了几百个接口)。但那样就变成“方案1”和“方案2”两个类库,都依赖于这一个公共的类库了。而实际上,这两个方案类库只需要里面的IDBOperation接口就可以了,却最终变成依赖于一个类库。

不知道大家有什么好的建议?

------解决方案--------------------
还是要一个公共的类库的,不仅是接口,还会有很多公共的数据定义要写的,
例如产品的版本信息,
前后台公用的一些方法等。
我一般命名为base.dll
另外两个是client.dll, server.dll

最后是base.dll最多代码。


------解决方案--------------------
这个根据模块的关系和你的需求定,只要遵循最小依赖原则,也就是尽可能少的引用别的库。
------解决方案--------------------
IDBOperation这个接口应该属于DAL层的。
------解决方案--------------------
接口是契约,很难讲必须停留在哪一层,即使是底层,也有可能存在接口。如果你所谓的接口是业务逻辑接口,那就放在业务逻辑层好了。但是与其讨论这个问题,不如问问你自己:使用接口的作用是什么?