Refactoring ModelDriver to favor composition over inheritance. Introduces idea of IModelFilter.

--HG--
extra : convert_revision : svn%3A5ff7c347-ad56-4c35-b696-ccb81de16e03/trunk%4041298
This commit is contained in:
loudej
2009-11-18 22:19:54 +00:00
parent d78f9a9b6f
commit dc9e302bae
26 changed files with 293 additions and 124 deletions

View File

@@ -0,0 +1,48 @@
using NUnit.Framework;
using Orchard.Models;
using Orchard.Models.Driver;
namespace Orchard.Tests.Models.Drivers {
[TestFixture]
public class ModelDriverTests {
[Test]
public void ModelDriverShouldUsePersistenceFilterToDelegateCreateAndLoad() {
var modelDriver = new TestModelDriver();
var part = new TestModelPart();
((IModelDriver)modelDriver).Creating(new CreateModelContext { Instance = part });
Assert.That(part.CreatingCalled, Is.True);
}
[Test]
public void PartShouldBeAddedBasedOnSimplePredicate() {
var modelDriver = new TestModelDriver();
var builder = new ModelBuilder("testing");
((IModelDriver)modelDriver).Activating(new ActivatingModelContext { Builder = builder, ModelType = "testing" });
var model = builder.Build();
Assert.That(model.Is<TestModelPart>(), Is.True);
Assert.That(model.As<TestModelPart>(), Is.Not.Null);
}
public class TestModelPart : ModelPart {
public bool CreatingCalled { get; set; }
}
public class TestModelDriver : ModelDriver {
public TestModelDriver() {
Filters.Add(new ActivatingFilter<TestModelPart>(x => x == "testing"));
Filters.Add(new TestModelStorageFilter());
}
}
public class TestModelStorageFilter : StorageFilterBase<TestModelPart> {
protected override void Creating(CreateModelContext context, TestModelPart instance) {
instance.CreatingCalled = true;
}
}
}
}

View File

@@ -2,7 +2,7 @@
namespace Orchard.Tests.Models.Stubs {
public class AlphaDriver : ModelDriver {
protected override void New(NewModelContext context) {
protected override void Activating(ActivatingModelContext context) {
if (context.ModelType == "alpha") {
context.Builder.Weld<Alpha>();
}

View File

@@ -6,7 +6,7 @@ using Orchard.Models.Driver;
namespace Orchard.Tests.Models.Stubs {
public class BetaDriver : ModelDriver {
protected override void New(NewModelContext context) {
protected override void Activating(ActivatingModelContext context) {
if (context.ModelType == "beta") {
context.Builder.Weld<Beta>();
}

View File

@@ -2,7 +2,7 @@
namespace Orchard.Tests.Models.Stubs {
public class FlavoredDriver : ModelDriver {
protected override void New(NewModelContext context) {
protected override void Activating(ActivatingModelContext context) {
if (context.ModelType == "beta" || context.ModelType == "alpha") {
context.Builder.Weld<Flavored>();
}

View File

@@ -1,7 +1,4 @@
using System;
using FluentNHibernate.Automapping;
using FluentNHibernate.Automapping.Alterations;
using Orchard.Data;
using Orchard.Data;
using Orchard.Models;
using Orchard.Models.Driver;
using Orchard.Models.Records;
@@ -15,15 +12,10 @@ namespace Orchard.Tests.Models.Stubs {
}
public class GammaDriver : ModelDriverWithRecord<GammaRecord> {
public GammaDriver(IRepository<GammaRecord> repository)
: base(repository) {
}
protected override void New(NewModelContext context) {
if (context.ModelType == "gamma") {
context.Builder.Weld<Gamma>();
}
public class GammaDriver : ModelDriver {
public GammaDriver(IRepository<GammaRecord> repository){
Filters.Add(new ActivatingFilter<Gamma>(x => x == "gamma"));
Filters.Add(new StorageFilterForRecord<GammaRecord>(repository));
}
}
}

View File

@@ -2,7 +2,7 @@
namespace Orchard.Tests.Models.Stubs {
public class StyledDriver : ModelDriver {
protected override void New(NewModelContext context) {
protected override void Activating(ActivatingModelContext context) {
if (context.ModelType == "alpha") {
context.Builder.Weld<Styled>();
}

View File

@@ -107,6 +107,7 @@
<Compile Include="Logging\LoggingModuleTests.cs" />
<Compile Include="Models\DefaultModelManagerTests.cs" />
<Compile Include="Models\Drivers\ModelBuilderTests.cs" />
<Compile Include="Models\Drivers\ModelDriverTests.cs" />
<Compile Include="Models\Stubs\Alpha.cs" />
<Compile Include="Models\Stubs\AlphaDriver.cs" />
<Compile Include="Models\Stubs\Beta.cs" />