Принадлежит ли шифрование данных шаблону хранилища?
-
03-07-2019 - |
Вопрос
Я использую шифрование на уровне приложений для защиты конфиденциальных данных. Мне нужно зашифровать поле, прежде чем я сохраню его в физической базе данных, и мне нужно расшифровать его, прежде чем я покажу его в пользовательском интерфейсе.
Я применяю шаблон репозитория в приложении.
Код шифрования / дешифрования данных принадлежит классу репозитория или за его пределами?
В настоящее время я думаю, что когда данные находятся в состоянии покоя, шифрование является аспектом хранилища, и класс обслуживания, использующий хранилище, не должен загромождаться этим кодом шифрования. Р>
Класс обслуживания отвечает за проверку и бизнес-логику, но алгоритм шифрования и способ хранения данных в состоянии покоя зависит от реализации репозитория.
Это разумная практика или я что-то упустил?
Решение
Вам определенно не нужно шифрование в классе обслуживания.
В некотором смысле, вы на самом деле отвечаете на свой вопрос, когда говорите
но алгоритм шифрования и способ хранения данных в состоянии покоя зависит от реализации репозитория.
Поскольку шифрование является частью способа хранения данных, оно принадлежит внутри хранилища.
Другие советы
Я бы поставил его на сервисный уровень. И вот почему:
С точки зрения бизнес-правил / требований к домену, является ли шифрование данных требованием? Должно ли это быть подтверждено тестами? Если это так, вы должны поместить его в то же место, где размещена вся другая проверяемая бизнес-логика. Другими словами, в сервисе.
Насколько мне известно, бизнес-логика (что шифровать, а что не шифровать) не принадлежит хранилищу. Сохраняемые объекты должны быть готовы к сохранению (или как можно ближе), когда они передаются в хранилище. В противном случае хранилище отвечает за постоянство и реализации бизнес-правил, и тогда вы больше не будете использовать шаблон хранилища ...