From 7f6c14effbf16ec11c8d21b0856a483c472d3820 Mon Sep 17 00:00:00 2001 From: Fritz Brandhuber Date: Mon, 20 Sep 2021 16:06:46 +0200 Subject: [PATCH] refractor circular dependencies between Domain, Fluent and Loader Signed-off-by: Fritz Brandhuber --- .../{Fluent => Domain}/IHasDescription.cs | 2 +- .../{Fluent => Domain}/IObjectProvider.cs | 3 +-- .../MethodMemberInstance.cs | 3 +-- .../Extensions/SyntaxElementExtensions.cs | 2 ++ ArchUnitNET/Fluent/LogicalConjunction.cs | 1 + ArchUnitNET/Fluent/Slices/SliceIdentifier.cs | 1 + .../ArchUnitArchitectureTests.cs | 21 ++++++++++++++++--- 7 files changed, 25 insertions(+), 8 deletions(-) rename ArchUnitNET/{Fluent => Domain}/IHasDescription.cs (91%) rename ArchUnitNET/{Fluent => Domain}/IObjectProvider.cs (88%) rename ArchUnitNET/{Loader => Domain}/MethodMemberInstance.cs (97%) diff --git a/ArchUnitNET/Fluent/IHasDescription.cs b/ArchUnitNET/Domain/IHasDescription.cs similarity index 91% rename from ArchUnitNET/Fluent/IHasDescription.cs rename to ArchUnitNET/Domain/IHasDescription.cs index cd032af0..dacc0ae8 100644 --- a/ArchUnitNET/Fluent/IHasDescription.cs +++ b/ArchUnitNET/Domain/IHasDescription.cs @@ -4,7 +4,7 @@ // // SPDX-License-Identifier: Apache-2.0 -namespace ArchUnitNET.Fluent +namespace ArchUnitNET.Domain { public interface IHasDescription { diff --git a/ArchUnitNET/Fluent/IObjectProvider.cs b/ArchUnitNET/Domain/IObjectProvider.cs similarity index 88% rename from ArchUnitNET/Fluent/IObjectProvider.cs rename to ArchUnitNET/Domain/IObjectProvider.cs index b9c563a6..95a14bef 100644 --- a/ArchUnitNET/Fluent/IObjectProvider.cs +++ b/ArchUnitNET/Domain/IObjectProvider.cs @@ -5,9 +5,8 @@ // SPDX-License-Identifier: Apache-2.0 using System.Collections.Generic; -using ArchUnitNET.Domain; -namespace ArchUnitNET.Fluent +namespace ArchUnitNET.Domain { public interface IObjectProvider : IHasDescription where T : ICanBeAnalyzed { diff --git a/ArchUnitNET/Loader/MethodMemberInstance.cs b/ArchUnitNET/Domain/MethodMemberInstance.cs similarity index 97% rename from ArchUnitNET/Loader/MethodMemberInstance.cs rename to ArchUnitNET/Domain/MethodMemberInstance.cs index 2b88a34a..e0939c56 100644 --- a/ArchUnitNET/Loader/MethodMemberInstance.cs +++ b/ArchUnitNET/Domain/MethodMemberInstance.cs @@ -7,9 +7,8 @@ using System.Collections.Generic; using System.Linq; -using ArchUnitNET.Domain; -namespace ArchUnitNET.Loader +namespace ArchUnitNET.Domain { public class MethodMemberInstance : ITypeInstance { diff --git a/ArchUnitNET/Fluent/Extensions/SyntaxElementExtensions.cs b/ArchUnitNET/Fluent/Extensions/SyntaxElementExtensions.cs index d35acf50..ca807810 100644 --- a/ArchUnitNET/Fluent/Extensions/SyntaxElementExtensions.cs +++ b/ArchUnitNET/Fluent/Extensions/SyntaxElementExtensions.cs @@ -4,6 +4,8 @@ // // SPDX-License-Identifier: Apache-2.0 +using ArchUnitNET.Domain; + namespace ArchUnitNET.Fluent.Extensions { public static class SyntaxElementExtensions diff --git a/ArchUnitNET/Fluent/LogicalConjunction.cs b/ArchUnitNET/Fluent/LogicalConjunction.cs index 13fe59f3..1d84123c 100644 --- a/ArchUnitNET/Fluent/LogicalConjunction.cs +++ b/ArchUnitNET/Fluent/LogicalConjunction.cs @@ -6,6 +6,7 @@ using System; using System.Collections.Generic; +using ArchUnitNET.Domain; namespace ArchUnitNET.Fluent { diff --git a/ArchUnitNET/Fluent/Slices/SliceIdentifier.cs b/ArchUnitNET/Fluent/Slices/SliceIdentifier.cs index 06104add..a3fea750 100644 --- a/ArchUnitNET/Fluent/Slices/SliceIdentifier.cs +++ b/ArchUnitNET/Fluent/Slices/SliceIdentifier.cs @@ -5,6 +5,7 @@ // SPDX-License-Identifier: Apache-2.0 // +using ArchUnitNET.Domain; using ArchUnitNET.Fluent.Freeze; namespace ArchUnitNET.Fluent.Slices diff --git a/ArchUnitNETTests/ArchitectureTests/ArchUnitArchitectureTests.cs b/ArchUnitNETTests/ArchitectureTests/ArchUnitArchitectureTests.cs index 8acc3140..646ce33b 100644 --- a/ArchUnitNETTests/ArchitectureTests/ArchUnitArchitectureTests.cs +++ b/ArchUnitNETTests/ArchitectureTests/ArchUnitArchitectureTests.cs @@ -7,6 +7,7 @@ using ArchUnitNET.Domain; using ArchUnitNET.Fluent; +using ArchUnitNET.Fluent.Slices; using ArchUnitNET.Loader; using ArchUnitNET.xUnit; using Xunit; @@ -23,11 +24,19 @@ public class ArchUnitArchitectureTests private readonly Architecture _architecture = new ArchLoader().LoadAssembly(typeof(Architecture).Assembly).Build(); - [Fact(Skip = "Need more refactoring")] - public void DomainHasNoDependencyOnFluentAndLoader() + [Fact] + public void DomainHasNoDependencyOnFluent() { Types().That().ResideInNamespace(DomainNamespace) - .Should().NotDependOnAny(new[] {LoaderNamespace, FluentNamespace}) + .Should().NotDependOnAny(FluentNamespace) + .Check(_architecture); + } + + [Fact] + public void DomainHasNoDependencyOnLoader() + { + Types().That().ResideInNamespace(DomainNamespace) + .Should().NotDependOnAny(LoaderNamespace) .Check(_architecture); } @@ -46,5 +55,11 @@ public void FluentHasNoDependencyOnLoader() .Should().NotDependOnAny(LoaderNamespace) .Check(_architecture); } + + [Fact] + public void NoCircularDependencies() + { + SliceRuleDefinition.Slices().Matching("ArchUnitNET.(*)").Should().BeFreeOfCycles().Check(_architecture); + } } } \ No newline at end of file