是否建议将接口作为返回类型?

Mik*_*ike 5 c# interface return-type

我有一组具有相同功能但具有不同逻辑的类.但是,每个类函数都可以返回许多对象.将返回类型设置为接口是安全的吗?

每个类(都使用相同的接口)使用不同的业务逻辑来执行此操作.

protected IMessage validateReturnType; <-- This is in an abstract class

public bool IsValid() <-- This is in an abstract class
{
    return (validateReturnType.GetType() == typeof(Success));
}

public IMessage Validate()
{
    if (name.Length < 5)
    {
        validateReturnType = new Error("Name must be 5 characters or greater.");
    }
    else
    {
        validateReturnType = new Success("Name is valid.");
    }

    return validateReturnType;
}
Run Code Online (Sandbox Code Playgroud)

单元测试函数的返回类型是否存在任何缺陷?另外,为了让它们成功运行需要运行的功能,它被认为是不好的设计吗?在此示例中,必须在IsValid()之前运行Validate(),否则IsValid()将始终返回false.

谢谢.

Bri*_*ndy 10

但是,每个类函数都可以返回许多对象.将返回类型设置为接口是安全的吗?

这是一种很好的做法和共同点.例如,看看COM的构建方式,它很大程度上依赖于这种方法.

单元测试函数的返回类型是否存在任何缺陷

没有.

另外,为了让它们成功运行需要运行的功能,它被认为是不好的设计吗?在此示例中,必须在IsValid()之前运行Validate(),否则IsValid()将始终返回false.

这对于使用面向对象的编程范例来说很好,例如使用套接字.在发送和接收数据之前,通常会有一个connect方法.

可以说,保持较少的状态而不是更多的状态作为一般规则是好的,因为通过这种方式,更容易证明你的程序是正确的.例如,您必须以一种方式测试依赖于此函数的每个函数,而不是现在以两种方式.如果您有很多州,可能的计划状态会呈指数级增长.如果您对状态为坏事感兴趣,请查看函数式编程.

  • +1表示状态的提及和解释,以及套接字示例.我做了很多套接字包装器,状态很痛苦. (2认同)