接口应该与其实现位于不同的项目中吗?

Ben*_*der 10 projects-and-solutions interface visual-studio

我的问题不是关于界面的使用,而是更多的项目组织性质.

注意:我在多层应用程序中使用VisualStudio.

我的Interface文件应该与其实现位于一个单独的项目中吗? 我最初的想法是,将我的所有服务接口分离到他们自己的项目(以及我的初始实现的项目)是有用的,这样可以在不久的将来删除实现/具体项目并在必要时替换为新项目. .

为了澄清一个例子:假设我有一个名为IBusinessService的业务层接口,它位于MyApp.Business.Services命名空间中.我的实现FooBusinessService将存在于同一名称空间中,但是VisualStudio中的不同项目.如果稍后需要重新编写实现,开发人员可以删除对FooService.proj的引用,并将其替换为对BarService.proj的引用.

这似乎可以通过允许您仅使用接口引用项目而无需获取具体实现(可能已过时或对您没用)来整合应用程序解决方案,但我错过了什么?

Sco*_*her 10

我和你在一起.我更喜欢将我的接口放在一个单独的项目和不同的命名空间中.典型的例子是数据访问类.您希望能够编写MSSQL版本和MySQL版本,两者都实现相同的接口.因此,我更喜欢将接口定义放在单独的程序集/项目中.这是我如何布置程序集和命名空间的示例:

  • Elder.DataAccess.Core - 包含接口和常用实用程序
  • Elder.DataAccess.MSSQL - 接口的特定MSSQL实现
  • Elder.DataAccess.MySQL - 接口的特定MySQL实现

这允许我修改实现而不触及包含接口定义的项目.这也有助于我进行版本控制和更改跟踪.可能有其他方法可以给这只猫留下皮肤,所以我很想看到其他人的答案.