1

我有一个我正在尝试解决但无法解决的问题,因此如果可能,我会寻求您的帮助。

我正在重构一个最终成为三个项目的项目。

核心框架(业务和数据逻辑)活动(基于插件)

我试图避免发生的是交叉引用活动和核心项目。由于曾经属于核心逻辑的类现在位于活动项目中,因此我不得不复制某些东西,例如枚举和辅助类。

这让我想到了我的问题:

我有一个最初在我的核心中的类的引用,我的核心中也需要它。但是我的活动项目中也使用了该类,但是如果没有对我的核心项目的引用,则找不到该类。与我的活动类中使用的一些枚举相同,但也用于我的核心代码中。

因此,为了避免在我的活动中引用我的核心项目——可以在我的活动项目中复制这些类和枚举吗?如果不是,我的其他选择是什么?

我希望在这段代码中尽可能正确。下周我的同龄人将研究它。

在这种情况下,您有什么建议?希望我足够清楚。

谢谢

4

2 回答 2

3

为了进一步扩展我上面的评论,如果您有在 Core 和 Activies 程序集中使用的类/枚举,请将它们移动到它们自己的单独程序集中(类库 - DLL)。然后核心和活动都可以引用该 DLL,而不是相互引用或具有重复的代码。

简单的例子:

public static class Helper
{

    // Helper methods
}

让这个类成为一个单独的 DLL 的一部分(为了示例,我们称它为 Common)。然后在核心和活动项目中,添加对公共项目/DLL 的引用,并using Common;根据需要添加适当的语句。

现在Core 和Activities 都可以使用Common 中的对象,而不必a) 引用另一个程序集(这可能会引入紧密耦合)或b) Core 和Activity 中都存在重复的代码。

它还使维护公共代码更容易,因为只有一个地方可以更改它,而不是两个。并且如果您将来添加新的程序集,它们也可以根据需要使用 Common DLL。

于 2013-08-03T19:04:02.840 回答
3

如果有其他可能使用这些类的外部代码,则不能在单独的程序集中复制这些类。如果类或枚举定义了两次,即使它们完全相同,CLR 也会将它们视为两种完全不同的类型。

这对我来说很有意义,如果你有一个名为“核心”的程序集,该程序集应该有其他程序集将使用的代码,所以我不明白为什么它们不能在核心中定义并且有活动参考核心。

如果这不可接受,您可能需要重命名核心,并将重用的代码放在单独的程序集中。然后,您可以在两个现有程序集中引用它,但不要强制它们相互引用。

于 2013-08-03T19:04:51.393 回答