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

@@ -6,7 +6,7 @@ using Orchard.Security;
using Orchard.Services;
namespace Orchard.Core.Common.Models {
public class CommonDriver : ModelDriverWithRecord<CommonRecord> {
public class CommonDriver : ModelDriver {
private readonly IClock _clock;
private readonly IAuthenticationService _authenticationService;
private readonly IModelManager _modelManager;
@@ -15,40 +15,35 @@ namespace Orchard.Core.Common.Models {
IRepository<CommonRecord> repository,
IClock clock,
IAuthenticationService authenticationService,
IModelManager modelManager)
: base(repository) {
IModelManager modelManager) {
_clock = clock;
_authenticationService = authenticationService;
_modelManager = modelManager;
AddOnCreating<CommonModel>(SetCreateTimesAndAuthor);
Filters.Add(new StorageFilterForRecord<CommonRecord>(repository));
AddOnLoaded<CommonModel>(LoadOwnerModel);
}
protected override void Create(CreateModelContext context) {
var instance = context.Instance.As<CommonModel>();
if (instance != null && instance.Record != null) {
if (instance.Record.CreatedUtc == null) {
instance.Record.CreatedUtc = _clock.UtcNow;
}
if (instance.Record.ModifiedUtc == null) {
instance.Record.ModifiedUtc = _clock.UtcNow;
}
if (instance.Record.OwnerId == 0) {
instance.Owner = _authenticationService.GetAuthenticatedUser();
if (instance.Owner != null)
instance.Record.OwnerId = instance.Owner.Id;
}
void SetCreateTimesAndAuthor(CreateModelContext context, CommonModel instance) {
if (instance.Record.CreatedUtc == null) {
instance.Record.CreatedUtc = _clock.UtcNow;
}
if (instance.Record.ModifiedUtc == null) {
instance.Record.ModifiedUtc = _clock.UtcNow;
}
if (instance.Record.OwnerId == 0) {
instance.Owner = _authenticationService.GetAuthenticatedUser();
if (instance.Owner != null)
instance.Record.OwnerId = instance.Owner.Id;
}
base.Create(context);
}
protected override void Loaded(LoadModelContext context) {
var instance = context.Instance.As<CommonModel>();
if (instance != null && instance.Record != null) {
if (instance.Record.OwnerId != 0) {
instance.Owner = _modelManager.Get(instance.Record.OwnerId).As<IUser>();
}
void LoadOwnerModel(LoadModelContext context, CommonModel instance) {
if (instance.Record.OwnerId != 0) {
instance.Owner = _modelManager.Get(instance.Record.OwnerId).As<IUser>();
}
base.Loaded(context);
}
}
}