Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 蒙托林;事件标准_C#_Oop_Design Patterns_Domain Driven Design - Fatal编程技术网

C# 蒙托林;事件标准

C# 蒙托林;事件标准,c#,oop,design-patterns,domain-driven-design,C#,Oop,Design Patterns,Domain Driven Design,我正在编写一个监控网络中某些节点的应用程序。基于各种条件,节点类型的每个状态都可以触发事件。现在我想让用户能够设置监视和警报的标准 简单域: - Devices Any piece of hardware that can be accessed via ICMP (ping) and/or SNMP. * Is Discovered * Configuration Mismatch * Configuration changed * Is offlin

我正在编写一个监控网络中某些节点的应用程序。基于各种条件,节点类型的每个状态都可以触发事件。现在我想让用户能够设置监视和警报的标准

简单域:

- Devices
    Any piece of hardware that can be accessed via ICMP (ping) and/or SNMP.

    * Is Discovered
    * Configuration Mismatch
    * Configuration changed
    * Is offline for
        10 minutes
        20 minutes
        1 day
        1 week
        ...

- User
    A registered user in my application environment

    * is registered
    * is removed
    * unathorized access event

我已经试了几个小时了,但是我想不出一个域模型来适应这种灵活的配置。最简单的方法可能只是让某些基本类型“TimeCriteria”、“EntityCriteria”可以填充键值对,这些键值对将根据对象(其属性)进行验证。有人有什么好主意吗?

我不确定自己是否完全理解这个问题,但这听起来很适合这个问题。您可以定义一个通用规范接口,如

public interface ISpecification<T>
{
    bool IsSatisfiedBy(T candidate);
}
公共接口规范
{
布尔是满意的(T候选人);
}
这将使您能够定义各种不同的具体规范,如

public class IsOfflineSpecification : ISpecification<Device>
{
    private readonly TimeSpan limit;

    public IsOfflineSpecification(TimeSpan limit)
    {
        this.limit = limit;
    }

    public IsSatisfiedBy(Device candidate)
    {
        // Compare candidate with limit here,
        // and return the appropriate answer (true/false)
    }
}
public类Isofrinspecification:ISpecification
{
私有只读时间跨度限制;
公共信息(时间跨度限制)
{
这个极限=极限;
}
公共信息由(设备候选)提供
{
//将候选人与此处的限制进行比较,
//并返回相应的答案(对/错)
}
}
使用规范模式,还可以定义对应于布尔操作等的

客户将与规范接口进行对话,以确定某个候选者是否符合规范:

ISpecification<Device> spec // ...
Device candidate = new //...
if (spec.IsSatisfiedBy(candidate))
    // do something interesting...
isspecificationspec/。。。
候选设备=新建/。。。
如果(规格符合(候选人))
//做些有趣的事。。。