将来の検証を回避する目的で単純な String オブジェクトのラッパーを返すことは理にかなっていますか?
たとえば、URI は複数の部分 (スキーム、権限、パス、クエリ、およびフラグメント) で構成される単純な文字列です。URI を表すクラスを設計するときに、URI の一部を単純な String オブジェクトとして公開するか、インターフェース IUriCompontent を介して公開することができます。
public interface IUri
{
IUriComponent Scheme { get; set; }
IUriComponent Authority { get; set; }
IUriComponent Path { get; set; }
IUriComponent Query { get; set; }
IUriComponent Fragment { get; set; }
}
public interface IUriComponent
{
String Value { get; }
}
私の考えでは、URI からコンポーネントを解析した後、それぞれを不変で検証済みのコンテナーに配置できます。このコンテナーは、そのコンテンツが有効な URI コンポーネントを表しているという前提の下で動作するように渡され、それによって将来の検証の必要性が軽減されます。