Я ищу несколько советов по архитектуре для решения клиент/сервер с некоторыми особенностями.Защита конфиденциальных данных сущности
Клиент довольно толстый, оставляя сервер главным образом для обеспечения жизнеспособности, параллелизма и инфраструктуры. Сервер содержит несколько объектов, которые содержат как конфиденциальную, так и общедоступную информацию. Подумайте, например, что лица являются лицами, предположим, что номер и имя социального страхования чувствительны, а возраст является общедоступным.
При запуске клиента пользователю предоставляется ряд объектов, не раскрывающих конфиденциальной информации. В любое время пользователь может выбрать вход в систему и аутентификацию с сервером, поскольку аутентификация прошла успешно, пользователю предоставляется доступ к конфиденциальной информации.
Клиент имеет доменную модель, и я думал о ее реализации как о какой-то «ленивой загрузке», сделав первый запрос, создающий объекты, а затем обновляя их конфиденциальными данными. Газопоглотители сущностей будут бросать исключения на конфиденциальной информации, когда они не были раскрыты, f.e .:
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;
}
Некоторые проблемы:
- Что делать, если пользователь входит в систему, а затем из, чувствительные данные были загружены, но должны быть раскрыты еще раз.
- Можно утверждать, что этот тип функциональности относится к домену, а не к некоторой инфраструктурной реализации (т. Е. Реализации репозитория).
- Как всегда при работе с большим количеством свойств, есть риск того, что этот тип функциональности загромождает код
Любые идеи или обсуждения оценили!