最好的方法是什么?为什么?
V1:
try
{
var service = IoC.Resolve<IMyBLService>();
service.Do();
}
catch(BLException ex)
{
//Handle Exception
}
V2:
var service = IoC.Resolve<IMyBLService>();
var result = service.Do();
if (!result.Success)
{
//Handle exception
}
我认为例外更好。我认为 DDD 代码首先是优秀的面向对象代码。关于在 OO 语言中使用异常与返回代码的争论已经基本结束。在 DDD 上下文中,我看到使用异常的以下好处:
他们强制调用代码来处理它们。异常不要让客户端代码忘记错误。调用代码可能只是忘记检查result.Success
.
在我看来,抛出和处理代码都更具可读性、自然性和简洁性。没有“ifs”,没有多个返回语句。无需将您的域服务公开为“操作”。
在我看来,DDD 就是使用简单的 OO 语言来表达特定的业务问题并尽可能地将基础设施排除在外。创建“OperationResult”类对我来说似乎过于基础化和通用,尤其是当语言已经支持异常时。
无论如何,域对象都会抛出异常,即使它只是为了检查参数。因此,对域服务使用相同的机制似乎很自然。
也许也值得看看设计本身,也许有一种方法可以一开始就不会进入错误状态?例如,可以通过使用消除整类“验证”错误条件值对象 http://domaindrivendesign.org/node/135而不是原始字符串和整数。
DDD 是一种方法、一套指南,因此不存在“正确”的方法。这book https://rads.stackoverflow.com/amzn/click/com/0321125215从未直接提及此问题,但代码片段和示例项目中的代码使用了异常。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)