0

我们的 SaaS 产品的要求是构建一个域层,其中任何属性或属性组合的更改都可能触发域事件 - 并随后启动自定义流程或通知。

因此,我犹豫是否要向域层添加大量代码,这些代码会启动大量 DomainEvent 对象,这对许多租户来说可能没有意义。

每个租户将有能力(通过 UI 屏幕): 1. 定义他们关心的属性(例如“金额”)以及原因(例如金额现在大于 100 美元) 2. 定义当他们改变时会发生什么(例如踢关闭审批程序)

对我来说,这似乎是一个业务规则引擎集成以及一个 BPMS。有人对更轻量级的框架或解决方案有想法吗?

4

1 回答 1

0

您可以发布一个通用事件,该事件的约束/规范针对唯一的Name. 让我们称之为事件SpecificationEvent。也许您会有一个SpecificationEventService可以检查实现 aISpecificationValueProvider并返回您可以发布的填充事件的域对象:

public interface ISpecificationEventValueProvider
{
    object GetValue(string name);
}

public class SpecificationEventService
{
    IEnumerable<SpecificationEvent> FindEvents(ISpecificationEventValueProvider provider);
}

public class SpecificationEvent
{
    private List<SpecificationEventValue> _values;

    public string Name ( get; private set; }

    public IEnumerable<ISpecificationEventValue> Values
    {
        get { return new ReadOnlyCollection<ISpecificationEventValue>(_values); }
    }  
}

public class SpecificationEventValue
{
    public string Name { get; private set; }
    public object Value { get; private set; }

    public SpecificationEventValue(string name, object value)
    {
        Name = name;
        Value = value;
    }
}

因此,您将在某个商店中定义自定义事件。可能来自一些用于定义构成事件的约束的前端。将SpecificationEventService使用该定义来确定候选对象是否符合要求,然后返回具有填充值的事件,然后您可以发布该事件。

自定义代码可以在您处理通用的端点中注册SpecificationEvent。每个自定义处理程序都可以收到事件进行处理,但只有确定事件对其有效的处理程序才会执行任何实际处理。

希望这是有道理的。我刚刚输入了这个,所以它不是生产级代码,你可以研究泛型的使用object:)

于 2015-08-25T04:22:13.443 回答