いくつかの特徴を持つクライアント/サーバー ソリューションのアーキテクチャに関するアドバイスを探しています。
クライアントはかなり厚いものであり、サーバーは主に永続性、同時実行性、およびインフラストラクチャの問題に任せられています。サーバーには、機密情報と公開情報の両方を含む多数のエンティティが含まれています。たとえば、エンティティが人であり、社会保障番号と名前が機密情報であり、年齢が一般に公開されているとします。
クライアントを起動すると、機密情報を開示することなく、多数のエンティティがユーザーに表示されます。ユーザーはいつでもログインしてサーバーに対して認証することを選択できます。認証が成功すると、機密情報へのアクセスがユーザーに許可されます。
クライアントはドメイン モデルをホストしており、これをある種の「遅延読み込み」として実装し、最初のリクエストでエンティティをインスタンス化し、後で機密データで更新することを考えていました。機密情報が開示されていない場合、エンティティ ゲッターは機密情報に対して例外をスローします。fe:
class PersonImpl : PersonEntity
{
private bool undisclosed;
public override string SocialSecurityNumber {
get {
if (undisclosed)
throw new UndisclosedDataException();
return base.SocialSecurityNumber;
}
}
}
別のより友好的なアプローチは、値が非公開であることを示す値オブジェクトを持つことです。
get {
if (undisclosed)
return undisclosedValue;
return base.SocialSecurityNumber;
}
いくつかの懸念:
- ユーザーがログインしてからログアウトすると、機密データは読み込まれますが、もう一度開示する必要があります。
- このタイプの機能はドメイン内に属し、一部のインフラストラクチャの実装 (つまり、リポジトリの実装) ではないと主張することができます。
- いつものように、より多くのプロパティを扱う場合、このタイプの機能がコードを乱雑にするリスクがあります。
洞察や議論は大歓迎です!