今後のいくつかのアプリケーションのコア ビジネス オブジェクト モデルとして機能する内部専用ライブラリを設計しています。主に、さまざまな種類の顧客とさまざまな種類のドキュメントをカバーしています。
これらのオブジェクトを使用する場合、特にシリアル化する場合は、それらが有効で正常な値を持っていることを確認したいのは明らかです。
たとえば、Customer には連絡先情報があり、それには電話番号が含まれます。インターフェイスITelephoneNumber
、基本クラス、US 実装などがあります。ライブラリは、これらのクラスを使用してデータを検証します。
しかし実際には、Customer はより「コア」なビジネス オブジェクトであり、PhoneNumber はそうではありません。電話番号の構造を大量に書き、それを Our-Library-Goodness として公開するのは少し奇妙に感じます。それらは少し「範囲外」のようです。
電話番号は一例です。他にもあります。これらのクラス構造を静的メソッドにリファクタリングすることはできますが、コンストラクターが長くなり、コンストラクターはメソッドを使用することを「知っている」必要があります。
私の質問は
ライブラリの利用者は、コア オブジェクトを定義するのに実際には必要ないこれらのヘルパー クラスを操作する必要がありますか? 次のように:
MyCustomer.SetTelephoneNumber(new USTelephoneNumber("555", "555", "5555%$&"));
コンパイル時のフィードバック、独自のメンバー (AreaCode、Exchange...) などを提供します。
それとも、有効な電話番号を取得する手段を実装に任せて、それについてもっと「ブラックボックス」にするべきですか? 次のように:
MyCustomer.SetTelephoneNumber("555-555-5555%$&");
エラーをスローするか、サイレントに失敗/成功するか、string.Empty などを返します。
この質問に「答える」ことができるかどうかはわかりませんし、聖戦も始めたくありません。いずれにせよ、何らかの理由を探しています。私たちは、コードの品質や保守性をあまり気にしないエージェンシーで正しいことをしようとしている 2 人のチームです。