我希望能够使用这种代码实例化我的应用程序中的任何对象:
SmartForm smartForm = SmartForm.Create("id = 23");
Customer customer = Customer.Create("id = 222");
Run Code Online (Sandbox Code Playgroud)
我现在正在讨论如果该对象不存在,Create()应该返回什么.
如果Create()返回一个空对象,那么这就是一种"空模式",我仍然可以在我的应用程序周围传递该对象并在其上调用方法,这使得使用此模型进行编程变得方便和容易
如果Create()返回null,那么我需要在每次实例化后检查对象是否等于null,这使得编程更乏味但更明确.这样做的一个问题是,如果你忘记检查null,你的应用程序可能会工作很长时间而你不知道你没有检查null,然后突然中断
如果创建()抛出一个异常,这是基本相同,返回空,但使编程更加的让你创建一个尝试,未来,finally块为每个实例乏味,但你可以扔不同类型的异常(你可以" (使用null解决方案)可能会冒泡,以便您可以更明确地处理UI上的深层错误,所以我认为这是最强大的解决方案,尽管会产生try/catch代码膨胀
所以它似乎是一种轻盈/稳健的权衡.有没有人有任何经验可以根据这个决定沿着这些方向做出决定?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace TestFactory234.Models
{
public class SmartForm : Item
{
public string IdCode { get; set; }
public string Title { get; set; }
public string Description { get; set; }
public int LabelWidth { get; set; }
public SmartForm() { }
private SmartForm(string …Run Code Online (Sandbox Code Playgroud) 什么时候应该抛出自定义异常?
例如,我有一些连接到服务器的代码。连接到服务器的代码在连接失败时会抛出 IOException。在它所调用的方法的上下文中,这很好。在网络代码中也很好。
但由于这表示没有连接(因此无法正常工作),异常会一直上升到用户界面。在这个阶段,IOException 的含义非常模糊。像 NoConnectionException 这样的东西会更好。
所以,我的问题是:您应该在哪个阶段捕获异常,而不是抛出另一个更适合抽象的(自定义)异常?