.net 界面的位置

.net 界面的位置,.net,architecture,separation-of-concerns,loose-coupling,architectural-patterns,.net,Architecture,Separation Of Concerns,Loose Coupling,Architectural Patterns,给定一个通过实现松散耦合层、具有IoC容器等来遵守SoC原则的代码项目,例如一个简单的ASP.NET MVC解决方案,该解决方案分为以下组件: 应用程序集+命名空间 模型程序集+命名空间(包含访问DB数据的具体存储库) 模型程序集中的具体存储库必须实现一个公共接口IMyBusinessRepository,您会将该接口放在哪个程序集中 1) 如果将该接口放在模型程序集中,则在不修改应用程序程序程序集的代码的情况下,很可能无法将该程序集替换为另一个程序集(至少如果它具有不同的名称空间)。另外,

给定一个通过实现松散耦合层、具有IoC容器等来遵守SoC原则的代码项目,例如一个简单的ASP.NET MVC解决方案,该解决方案分为以下组件:

  • 应用程序集+命名空间
  • 模型程序集+命名空间(包含访问DB数据的具体存储库)
模型程序集中的具体存储库必须实现一个公共接口
IMyBusinessRepository
,您会将该接口放在哪个程序集中

1) 如果将该接口放在模型程序集中,则在不修改应用程序程序程序集的代码的情况下,很可能无法将该程序集替换为另一个程序集(至少如果它具有不同的名称空间)。另外,驻留在不同程序集中的替代
IMyBusinessRepository
实现必须引用原始实现(Argh!)

2) 如果将模型程序集放在应用程序程序集中,则不引用应用程序程序集(Argh!)就不可能在其他项目中使用模型程序集

3) 或者您会仅仅为该接口创建一个单独的公共程序集,并为此为每个公共接口或一组接口创建一个单独的公共程序集?(啊?)


总之,X程序集在应用程序A中应该很容易更换(只需更改引用),并且在应用程序B、C、D中可以重用。

您可以按照建议简单地使用契约或接口程序集

然而,考虑到您正试图在关注点分离原则中使用,您是否希望同时替换所有接口的所有实现,或者可能只是一个单独的具体实现


如果您希望全部替换,那么单独的程序集可能是最好的,否则您可以简单地将替换实现与现有实现一起放在模型程序集中,并在模型程序集中声明接口。

您可以简单地使用契约或接口程序集,正如您所建议的那样

然而,考虑到您正试图在关注点分离原则中使用,您是否希望同时替换所有接口的所有实现,或者可能只是一个单独的具体实现


如果您希望替换所有组件,那么单独的组件可能是最好的,否则您可以简单地将模型组件中的替换实现与现有实现一起,并在模型组件中声明接口。

SoC是一个逻辑概念,您正试图将其转换为物理概念

将存储库放在模型中的唯一不利影响是程序集,将来可能很难交换程序集。我不明白这种担心?也许外星人会入侵,我们需要把银河系的时间输入我们的数据库。我们现在应该编写抽象代码吗?可能不会

我也不理解这种担心。是什么阻止您在模型部件中使用
Concrete1:IRepository
Concrete2:IRepository


此外,如果应用程序的核心需要通过更改模型类来修改,则可能会出现不正确的耦合。这有点倒退。

SoC是一个逻辑概念,您正试图将其转化为物理概念

将存储库放在模型中的唯一不利影响是程序集,将来可能很难交换程序集。我不明白这种担心?也许外星人会入侵,我们需要把银河系的时间输入我们的数据库。我们现在应该编写抽象代码吗?可能不会

我也不理解这种担心。是什么阻止您在模型部件中使用
Concrete1:IRepository
Concrete2:IRepository

此外,如果应用程序的核心需要通过更改模型类来修改,则可能会出现不正确的耦合。这有点倒退。

选项3

将接口定义与调用代码放在一起是很好的,直到您想要根据接口而不是持有接口的组件进行开发(比如说,您想要构建一个数据访问提供者,但不想引入整个网站项目)。将其与实现结合起来简直是胡说八道:)

您是否仅为该接口创建一个单独的公共程序集,以及为此,为每个公共接口或接口集创建一个单独的公共程序集?(啊?)

我将通过考虑和原则将接口分组到单独的程序集中。依靠自己,他们也将是。考虑使用它们的场景-将它们放在一起有意义吗-如果是这样,那么它们可能在一个组件中就可以了。

选项3

将接口定义与调用代码放在一起是很好的,直到您想要根据接口而不是持有接口的组件进行开发(比如说,您想要构建一个数据访问提供者,但不想引入整个网站项目)。将其与实现结合起来简直是胡说八道:)

您是否仅为该接口创建一个单独的公共程序集,以及为此,为每个公共接口或接口集创建一个单独的公共程序集?(啊?)


我将通过考虑和原则将接口分组到单独的程序集中。依靠自己,他们也将是。考虑使用它们的场景—将它们放在一起有意义吗—如果是这样,那么它们可能在一个程序集中就可以了。

我建议将接口放在单独的程序集中,或者放在同一程序集中靠近其实现的地方。接口本身应至少有一个接口实现。C