この種のコードを使用して、アプリケーション内の任意のオブジェクトをインスタンス化できるようにしたいと考えています。
SmartForm smartForm = SmartForm.Create("id = 23");
Customer customer = Customer.Create("id = 222");
そのオブジェクトが存在しない場合に Create() が何を返すべきかを議論しています。
Create() が空のオブジェクトを返す場合、これは一種の「null パターン」であり、そのオブジェクトをアプリケーションに渡してメソッドを呼び出すことができます。これにより、このモデルを使用したプログラミングが便利で簡単になります。
Create() がnullを返す場合、インスタンス化のたびに、オブジェクトが null に等しいかどうかを確認する必要があります。これにより、プログラミングは少し面倒ですが、より明確になります。これに関する問題は、null をチェックするのを忘れた場合、null をチェックしていないことを知らずにアプリケーションが長時間動作し、突然中断する可能性があることです。
Create()が例外をスローする場合、基本的には null を返すのと同じですが、インスタンス化ごとに try、next、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 loadCode)
{
_loadCode = loadCode;
TryToInstantiateFromDatabase();
}
public static SmartForm Create(string loadCode)
{
SmartForm smartForm = new SmartForm(loadCode);
if (!smartForm.IsEmpty())
{
return smartForm;
}
else
{
return null;
}
}
}
}