Architecture 我应该在哪里定义接口以获得良好的体系结构?

Architecture 我应该在哪里定义接口以获得良好的体系结构?,architecture,interface,Architecture,Interface,我有两个项目,比如应用程序和数据。数据中有一些方法供应用程序项目使用,这样应用程序项目就不必担心任何数据访问/数据库连接等问题。我想这种设置的好处在于1。数据不依赖于App和2。如果数据库发生了更改,比如从MS SQL更改为Oracle,那么您根本不需要更改应用程序项目,只需开发一个新的数据项目即可 似乎应该为应用程序项目用于数据访问的所有方法定义一个接口。这样,有人可以开发应用程序项目,而不必关心数据项目,不同的数据项目可以插入到应用程序项目中,只要它实现了接口,一切都将正常工作 为什么会有这

我有两个项目,比如应用程序和数据。数据中有一些方法供应用程序项目使用,这样应用程序项目就不必担心任何数据访问/数据库连接等问题。我想这种设置的好处在于1。数据不依赖于App和2。如果数据库发生了更改,比如从MS SQL更改为Oracle,那么您根本不需要更改应用程序项目,只需开发一个新的数据项目即可

似乎应该为应用程序项目用于数据访问的所有方法定义一个接口。这样,有人可以开发应用程序项目,而不必关心数据项目,不同的数据项目可以插入到应用程序项目中,只要它实现了接口,一切都将正常工作

为什么会有这样的问题:接口应该位于哪里?若数据存在于应用程序中,那个么它现在依赖于应用程序。但如果它存在于数据中,则必须将其复制到任何可能需要插入的新数据项目中


我再举一个例子:假设应用程序是一个在线销售工具。您可能需要相同应用程序项目的两个实例,一个用于易趣,一个用于亚马逊。eBay实例将有一个与eBay一起工作的数据项目,而Amazon实例将有一个不同的数据项目。如何构造应用程序,以便将相同的应用程序组件部署到两个实例?接口是正确的使用方式吗?

是的,接口正是正确的使用方式,您通常会将它们放在单独的文件中—通常每个接口都放在自己的文件中—然后简单地引用文件(或模块或程序集,取决于平台)其中,在实现支持所述接口的新对象时声明接口


此方案允许分离关注点、简化单元测试、模拟等。

如果您希望隔离依赖项,最干净的方法是将接口编码到不同的AppDataInterface项目中,应用程序和数据都可以依赖该项目。

啊,我明白了。因此,实现对象引用接口项目。那么,主项目是否必须引用接口项目和实施者项目?否则,您实际上如何用主项目实例化实现类?