c# - 空对象模式的空接口
问题描述
我有一些用于使用 WCF 传输数据的 DTO 对象。
public class Foo
{
//Many fields
}
WCF 服务方法返回这个对象,我有这个对象应该为空的有效情况。
我想使用 null 对象模式返回一些东西而不是 null 以使这段代码更清晰。
因此,我将其实现为:
public interface IFoo
{
//empty
}
public class NoFoo : IFoo
{
//empty
}
public class Foo : IFoo
{
public static IFoo NoFoo { get; } = new NoFoo();
//Many fields
}
类的使用Foo
不需要IFoo
在空检查之外。但我觉得空界面肯定是一种代码味道。Foo
但是,如果我将添加to的所有(或任何)成员IFoo
,这些成员将永远不会被使用。因为接口仅用于空对象模式。所以,我不明白,在这种情况下正确的方法是什么?
解决方案
所以我找到了更好的方法来实现我想要的。我把实现空对象模式的容器放在Foo
里面。IResult
public interface IResult
{
Foo Foo { get; }
}
public class Result : IResult
{
public static IResult NoResult = new NoResult();
public Foo Foo { get; private set; }
public Result(Foo foo)
{
Foo = foo;
}
private class NoResult : IResult
{
public Foo Foo => throw new NotImplementedException("Null object!");
}
}
推荐阅读
- javascript - 合并对象数组,修改一些结果条目
- javascript - Xrm.Page.getControl() 在 Dynamics 365 Sales Hub 中不起作用
- regex - 尝试不使用 RegEx 否定后向匹配日语单词
- c# - 试图从 bat 文件中读取,但它给了我一个错误
- tensorflow - 在 TensorFlow 中将 2D 卷积转换为 1D 卷积 + 仿射变换?
- android - 我应该同时更改目标 SDK 和编译 SDK 以支持更高版本吗?
- eloquent - 如何在 laravel / eloquent 中为 mysql 8 做公用表表达式?
- mips - “第 65 行:0x004000ec 处的运行时异常:无效或未实现的系统调用服务:97”为什么它不起作用?
- maven - 在基于 docker 的 GitLab CI 设置中为 maven 存储 settings.xml 的位置
- c# - 功能
不接受 2 个参数,但文档另有说明?