【问题标题】:Should interfaces be in a separate project from their implementation?接口应该与它们的实现放在一个单独的项目中吗?
【发布时间】:2010-12-10 20:29:15
【问题描述】:

我的问题与其说是关于接口的使用,不如说是关于项目组织的性质。

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

我的接口文件应该与它们的实现放在一个单独的项目中吗?我最初的想法是,将我的所有服务接口分离到他们自己的项目中(以及我最初的项目中)会很有用实施),以便在必要时可以删除实施/具体项目并用新项目替换。

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

这似乎会通过允许您引用仅具有接口的项目而不获取具体实现(这可能已过时或对您无用)来整理应用程序解决方案,但我是否遗漏了什么?

【问题讨论】:

标签: visual-studio interface projects-and-solutions


【解决方案1】:

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

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

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

【讨论】:

  • 谢谢斯科特。这是我现在使用的结构,我只是想确认它是有道理的并且我没有遗漏任何东西。除非其他人指出一个缺陷 - 我会在我的界面上使用这个。
猜你喜欢
  • 2010-11-03
  • 1970-01-01
  • 2010-12-10
  • 1970-01-01
  • 2010-09-17
  • 2011-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多