Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 松耦合设计中的常见定义_C#_Oop_Architecture_Loose Coupling - Fatal编程技术网

C# 松耦合设计中的常见定义

C# 松耦合设计中的常见定义,c#,oop,architecture,loose-coupling,C#,Oop,Architecture,Loose Coupling,我正在尝试组合一个非常细粒度的松散耦合设计 但我无法决定如何处理常见的定义 现在,我通过将其添加为外部dll来分离关注点。通过注入和接口,我的域可以在不知道实现的情况下使用我的业务逻辑 我遇到的问题是,对于松散耦合的所有组件,它们需要实现相同的接口。我的解决方案是一个单独的项目dll,只有所有的定义。 这一点一开始很好,但似乎变得臃肿,并将所有代码链接到这个dll依赖项上 最实用的方法是什么 谢谢 编辑 对不起,我想我一开始误解了你的问题。因此,您有一个包含接口的程序集,并且您在其他程序集中有使

我正在尝试组合一个非常细粒度的松散耦合设计

但我无法决定如何处理常见的定义

现在,我通过将其添加为外部dll来分离关注点。通过注入和接口,我的域可以在不知道实现的情况下使用我的业务逻辑

我遇到的问题是,对于松散耦合的所有组件,它们需要实现相同的接口。我的解决方案是一个单独的项目dll,只有所有的定义。 这一点一开始很好,但似乎变得臃肿,并将所有代码链接到这个dll依赖项上

最实用的方法是什么

谢谢

编辑


对不起,我想我一开始误解了你的问题。因此,您有一个包含接口的程序集,并且您在其他程序集中有使用DI创建依赖对象的实现。我倾向于在我的应用程序中创建一个核心程序集,其中包含应用程序智能实体、枚举和接口的主要行为。此程序集依赖性很小,但应用程序的其余部分依赖性很大。以这个项目为例-whocanhelpme.codeplex.com。你可以称之为核心膨胀,但根据定义,它需要非常丰富

您可能会发现,许多抽象单元遵循常见的设计模式。这里有一个网站,对每一个都有很好的描述-您可以从这些观察者、工厂、适配器等中获得名称:


我想说的是,该层应该只知道下一层及其接口,因此可以将接口与其实现一起放置,然后在链中的层组件之间添加引用

您可以使用引导程序模式配置DI,并通过定位器解析。对于日志记录、缓存等横切关注点,每个层都应该有单独的程序集引用。在这里,您还可以使用契约,将来可能会用另一个实现相同契约的程序集替换这些横切功能


希望这至少有点帮助:

我使用的是最接近工厂的方法。但是,通过松散耦合我的GUI层、业务层、服务层和数据层,它们都需要知道共享定义、接口、枚举等等。。其中的具体对象可以被传递。所以他们都需要知道使用具体实例的接口,这会创建一个交集和对定义的依赖。如果我试图将它们提取到一个单独的dll中,并进入我的用户管理逻辑,我还将加载DAO对象的定义。就像你想开门时需要一个建筑蓝图对不起,我想我一开始误解了你的问题。因此,您有一个包含接口的程序集,并且您在其他程序集中有使用DI创建依赖对象的实现。我倾向于在我的应用程序中创建一个核心程序集,其中包含应用程序智能实体、枚举和接口的主要行为。此程序集依赖性很小,但应用程序的其余部分依赖性很大。以这个项目为例-。你可以称之为核心膨胀,但根据定义,它需要非常丰富。谢谢!我正在检查它,并试图了解您的体系结构。我将进一步阅读,并尝试重新安排我的项目,以结合核心功能,而不是试图使我的接口/枚举可导出。