c# – 异常与ad-hoc类型.什么可能会摔倒?

c# – 异常与ad-hoc类型.什么可能会摔倒?,第1张

概述我在阅读MVC 3项目时正在阅读企业应用程序的书籍开发.我目前正在决定如何处理异常.以前我会让异常在堆栈中冒泡,然后在最高层处理它. 本书建议在域模型中创建一个ad-hoc类并返回它.例如. public sealed class MissingCustomer: Customer{}// On method failure return new MissingCustomer(); 我 我在阅读MVC 3项目时正在阅读企业应用程序的书籍开发.我目前正在决定如何处理异常.以前我会让异常在堆栈中冒泡,然后在最高层处理它.

本书建议在域模型中创建一个ad-hoc类并返回它.例如.

public sealed class MissingCustomer: Customer{}// On method failure return new MissingCustomer();

我可以看到这个想法,但我正在努力证明需要这个.代码明智我同意返回一个新的缺失客户更简洁,而不是抛出异常.

您如何看待这种方法,并且您遇到过哪种情况会产生重大影响?

如果我们假设一个客户必须始终存在,那么抛出一个例外说“嘿,客户应该总是存在而且由于某种原因它不存在,所以我将通知用户说某些特殊情况发生”是有意义的.另一方面,我可以假设客户可能被另一个人移除,因此我需要优雅地处理这个问题.

无论哪种方式,我认为我们需要一个MissingCustomer类或一个MissingCustomerException,因为客户是一个非常常见的实体,在整个系统中使用.如果视图模型需要一个客户并且我们返回一个MissingCustomer – 它很好,因为继承将使这个工作.

例如,我有一个返回Orderviewmodel的action方法.此 *** 作方法需要引用客户.

Customer customer = CustomerRepository.Find(10);if(customer == null){    return new MissingCustomer();}

这将会失败因为action方法将返回Orderviewmodel类型的视图模型,所以现在我更倾向于使用异常而不是MissingCustomer对象.

编辑

此外,MissingCustomer类型对象将从Customer类型继承属性.我们唯一不需要这些属性,就是通知用户无法找到客户.

谢谢

解决方法@H_502_39@ 我总是从用于获取客户的方法返回null.通过查看名为GetCustomer的函数,人们永远不会期望它可以返回一个真正不是客户的客户对象.

你使用像var customer = repos.GetCustomer(1)这样的东西要好得多吗?如果可以的话,Customer.Empty.意图很明确,代码变得不那么容易出错.

如果您的方法希望始终获得客户,则您之前未能验证输入.而不是创建一个解决方法来使代码工作,尝试在早期修复它.也许检查一下客户是否存在?

更新

我现在注意到问题确实是你的视图模型.在其中使用这种逻辑是完全正确的.毕竟视图模型用于调整MVC中的“M”以适应视图(因此从视图中删除逻辑).

我会用

public class Yourviewmodel{    public Customer Customer { get { return _customer ?? Customer.Empty; }}}
总结

以上是内存溢出为你收集整理的c# – 异常与ad-hoc类型.什么可能会摔倒?全部内容,希望文章能够帮你解决c# – 异常与ad-hoc类型.什么可能会摔倒?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1217280.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存