mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-09-19 01:57:55 +08:00
Refactoring the base ModelDriver's weld-part method into a ModelBuilder that's passed as part of the NewModelContext
--HG-- extra : convert_revision : svn%3A5ff7c347-ad56-4c35-b696-ccb81de16e03/trunk%4040852
This commit is contained in:
@@ -12,7 +12,7 @@ using Orchard.Tests.Models.Stubs;
|
||||
|
||||
namespace Orchard.Tests.Models {
|
||||
[TestFixture]
|
||||
public class DefaultModelBuilderTests {
|
||||
public class DefaultModelManagerTests {
|
||||
private IContainer _container;
|
||||
private IModelManager _manager;
|
||||
private ISessionFactory _sessionFactory;
|
39
src/Orchard.Tests/Models/Drivers/ModelBuilderTests.cs
Normal file
39
src/Orchard.Tests/Models/Drivers/ModelBuilderTests.cs
Normal file
@@ -0,0 +1,39 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using NUnit.Framework;
|
||||
using Orchard.Models.Driver;
|
||||
using Orchard.Tests.Models.Stubs;
|
||||
|
||||
namespace Orchard.Tests.Models.Drivers {
|
||||
[TestFixture]
|
||||
public class ModelBuilderTests {
|
||||
[Test]
|
||||
public void BuilderShouldReturnWorkingModelWithTypeAndId() {
|
||||
var builder = new ModelBuilder("foo");
|
||||
var model = builder.Build();
|
||||
Assert.That(model.ModelType, Is.EqualTo("foo"));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void IdShouldDefaultToZero() {
|
||||
var builder = new ModelBuilder("foo");
|
||||
var model = builder.Build();
|
||||
Assert.That(model.Id, Is.EqualTo(0));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void WeldShouldAddPartToModel() {
|
||||
var builder = new ModelBuilder("foo");
|
||||
builder.Weld<Alpha>();
|
||||
var model = builder.Build();
|
||||
|
||||
Assert.That(model.Is<Alpha>(), Is.True);
|
||||
Assert.That(model.As<Alpha>(), Is.Not.Null);
|
||||
Assert.That(model.Is<Beta>(), Is.False);
|
||||
Assert.That(model.As<Beta>(), Is.Null);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -4,7 +4,7 @@ namespace Orchard.Tests.Models.Stubs {
|
||||
public class AlphaDriver : ModelDriver {
|
||||
protected override void New(NewModelContext context) {
|
||||
if (context.ModelType == "alpha") {
|
||||
WeldModelPart<Alpha>(context);
|
||||
context.Builder.Weld<Alpha>();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -8,7 +8,7 @@ namespace Orchard.Tests.Models.Stubs {
|
||||
public class BetaDriver : ModelDriver {
|
||||
protected override void New(NewModelContext context) {
|
||||
if (context.ModelType == "beta") {
|
||||
WeldModelPart<Beta>(context);
|
||||
context.Builder.Weld<Beta>();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -4,7 +4,7 @@ namespace Orchard.Tests.Models.Stubs {
|
||||
public class FlavoredDriver : ModelDriver {
|
||||
protected override void New(NewModelContext context) {
|
||||
if (context.ModelType == "beta" || context.ModelType == "alpha") {
|
||||
WeldModelPart<Flavored>(context);
|
||||
context.Builder.Weld<Flavored>();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -22,7 +22,7 @@ namespace Orchard.Tests.Models.Stubs {
|
||||
|
||||
protected override void New(NewModelContext context) {
|
||||
if (context.ModelType == "gamma") {
|
||||
WeldModelPart<Gamma>(context);
|
||||
context.Builder.Weld<Gamma>();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -4,7 +4,7 @@ namespace Orchard.Tests.Models.Stubs {
|
||||
public class StyledDriver : ModelDriver {
|
||||
protected override void New(NewModelContext context) {
|
||||
if (context.ModelType == "alpha") {
|
||||
WeldModelPart<Styled>(context);
|
||||
context.Builder.Weld<Styled>();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -105,7 +105,8 @@
|
||||
<Compile Include="Environment\OrchardStarterTests.cs" />
|
||||
<Compile Include="Localization\NullLocalizerTests.cs" />
|
||||
<Compile Include="Logging\LoggingModuleTests.cs" />
|
||||
<Compile Include="Models\DefaultModelBuilderTests.cs" />
|
||||
<Compile Include="Models\DefaultModelManagerTests.cs" />
|
||||
<Compile Include="Models\Drivers\ModelBuilderTests.cs" />
|
||||
<Compile Include="Models\Stubs\Alpha.cs" />
|
||||
<Compile Include="Models\Stubs\AlphaDriver.cs" />
|
||||
<Compile Include="Models\Stubs\Beta.cs" />
|
||||
|
@@ -23,7 +23,7 @@ namespace Orchard.Roles.Models {
|
||||
|
||||
protected override void New(NewModelContext context) {
|
||||
if (context.ModelType == "user") {
|
||||
WeldModelPart<UserRolesModel>(context);
|
||||
context.Builder.Weld<UserRolesModel>();
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -3,12 +3,13 @@ using Orchard.Models.Driver;
|
||||
|
||||
namespace Orchard.Users.Models {
|
||||
public class UserDriver : ModelDriverWithRecord<UserRecord> {
|
||||
public UserDriver(IRepository<UserRecord> repository) : base(repository) {
|
||||
public UserDriver(IRepository<UserRecord> repository)
|
||||
: base(repository) {
|
||||
}
|
||||
|
||||
protected override void New(NewModelContext context) {
|
||||
if (context.ModelType == "user") {
|
||||
WeldModelPart<UserModel>(context);
|
||||
context.Builder.Weld<UserModel>();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -26,7 +26,7 @@ namespace Orchard.Models {
|
||||
// create a new kernel for the model instance
|
||||
var context = new NewModelContext {
|
||||
ModelType = modelType,
|
||||
Instance = new ModelRoot(modelType)
|
||||
Builder = new ModelBuilder(modelType)
|
||||
};
|
||||
|
||||
// invoke drivers to weld aspects onto kernel
|
||||
@@ -35,7 +35,7 @@ namespace Orchard.Models {
|
||||
}
|
||||
|
||||
// composite result is returned
|
||||
return context.Instance;
|
||||
return context.Builder.Build();
|
||||
}
|
||||
|
||||
public virtual IModel Get(int id) {
|
||||
|
22
src/Orchard/Models/Driver/ModelBuilder.cs
Normal file
22
src/Orchard/Models/Driver/ModelBuilder.cs
Normal file
@@ -0,0 +1,22 @@
|
||||
using System;
|
||||
|
||||
namespace Orchard.Models.Driver {
|
||||
public class ModelBuilder {
|
||||
private IModel _instance;
|
||||
|
||||
public ModelBuilder(string modelType) {
|
||||
_instance = new ModelRoot(modelType);
|
||||
}
|
||||
|
||||
public IModel Build() {
|
||||
return _instance;
|
||||
}
|
||||
|
||||
public ModelBuilder Weld<TPart>() where TPart : class, IModel, new() {
|
||||
var part = new TPart();
|
||||
part.Weld(_instance);
|
||||
_instance = part;
|
||||
return this;
|
||||
}
|
||||
}
|
||||
}
|
@@ -29,17 +29,5 @@ namespace Orchard.Models.Driver {
|
||||
|
||||
protected virtual void UpdateEditors(UpdateModelContext context) {
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// TODO: move this - make a modelbuilder class or something
|
||||
/// </summary>
|
||||
/// <typeparam name="TPart"></typeparam>
|
||||
/// <param name="context"></param>
|
||||
protected void WeldModelPart<TPart>(NewModelContext context) where TPart : class,IModel,new() {
|
||||
var newPart = new TPart();
|
||||
newPart.Weld(context.Instance);
|
||||
context.Instance = newPart;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
@@ -1,6 +1,6 @@
|
||||
namespace Orchard.Models.Driver {
|
||||
public class NewModelContext {
|
||||
public string ModelType { get; set; }
|
||||
public IModel Instance { get; set; }
|
||||
public ModelBuilder Builder { get; set; }
|
||||
}
|
||||
}
|
||||
|
@@ -137,6 +137,7 @@
|
||||
<Compile Include="Models\DefaultModelManager.cs" />
|
||||
<Compile Include="Models\Driver\CreateModelContext.cs" />
|
||||
<Compile Include="Models\Driver\LoadModelContext.cs" />
|
||||
<Compile Include="Models\Driver\ModelBuilder.cs" />
|
||||
<Compile Include="Models\Driver\ModelDriver.cs" />
|
||||
<Compile Include="Models\Driver\ModelDriverWithRecord.cs" />
|
||||
<Compile Include="Models\Driver\NewModelContext.cs" />
|
||||
|
Reference in New Issue
Block a user