Различные способы реализовать 'грязную [закрытую] функциональность '-флага

Вы можете попробовать это:

^(?=.*?[a-z])(?=.*?[A-Z])(?=.*?\d)[A-Za-z\d@$!%*#?&]{6,}$

Как показано здесь: https://regex101.com/r/GAkedL/1

Объяснение -

Здесь мы сопоставляем каждое условие в отдельности, потому что в вашем коде первое предположение подразумевает «за которым следует либо строчная или прописная буква».

(?=.*?[a-z]) сообщает регулярному выражению, что пароль должен содержать 0 или более символов, за которым следует строчная буква
(?=.*?[A-Z]) сообщает регулярному выражению, что пароль должен содержать 0 или более символов, за которым следует заглавная буква [ 118]
(?=.*?\d) сообщает регулярному выражению, что пароль должен содержать 0 или более символов, за которыми следует цифра

Обратите внимание на добавление ? после .* в каждом прогнозе , Это подразумевает, что регулярное выражение должно соответствовать как можно меньшему числу символов, прежде чем будет найдена необходимая буква или цифра, что более эффективно.

43
задан bmargulies 5 December 2012 в 01:11
поделиться

8 ответов

Для моего ДАО я сохраняю копию исходных значений, как получено от базы данных. Когда я отправляю его, чтобы быть обновленным, я просто сравниваю исходные значения с током. Это стоит немногого в обработке, но это намного лучше, чем наличие грязного флага на свойство.

РЕДАКТИРОВАНИЕ для дальнейшего выравнивания по ширине не наличия грязного флага: если свойство возвращается к своему исходному значению, нет никакого способа отразить, что, грязный флаг продолжается грязный, потому что исходное значение было потеряно.

24
ответ дан Otávio Décio 26 November 2019 в 23:04
поделиться

Я раньше имел основной класс Объекта, обеспечивая Грязную/Удаленную Логику.

При записи подклассов Объекта, Вы могли сделать что-то как:

public string Name
{
    get { return name; }
    set { setValue("Name", value); }
}

Это хорошо работает, но имеет 'ужасную строку' болезнь...

Сегодня можно использовать Лямбда-выражения для исключения строк:

set {setValue(x => x.Name, value);}

Или, и я думаю, что это - лучшее решение, Вы могли использовать AOP:

https://www.postsharp.net /

Таким образом, можно определить действия Атрибутами. Вы создаете атрибут и указываете, что, когда пользователь изменяет связанное свойство, объект становится грязным.

Кроме того, можно сохранить список свойств в классе (основывайте Объект), который будет помнить измененные свойства и доступ, которые перечисляют из Кода AOP.

10
ответ дан AmitaiB 26 November 2019 в 23:04
поделиться

Я создал класс, названный DirtyValue<T>, который имеет исходное значение и текущее значение. На его первом использовании это устанавливает и исходное значение и текущее значение. Последовательные вызовы только устанавливают текущее значение.

можно сказать, изменилось ли это путем сравнения этих двух с bool свойством только для чтения под названием IsDirty (). Используя эту технику можно также получить доступ к исходному значению также.

8
ответ дан pezi_pink_squirrel 26 November 2019 в 23:04
поделиться

Если Вы устанавливаете "грязный" флаг, понимают, что Вы сохраняете состояние. В какой-то момент необходимо принять меры на основе того состояния, иначе Вы не должны были бы сохранять флаг. Таким образом, вопрос затем становится: там другой путь состоит в том, чтобы инициировать необходимое действие? Отправка сообщений некоторого вида? Кто использует "грязное" состояние и принимает меры и там более чистый интерфейс для того уведомления?

6
ответ дан dwc 26 November 2019 в 23:04
поделиться

В некоторых ситуациях с задачей устройства записи данных и независимой задачей читателя, я дал каждую задачу updateCount переменная. Производитель увеличивает его количество каждый раз, когда оно пишет. Каждый раз, когда читатель просыпается и находит его количество меньше, чем количество производителя, оно делает обновление с текущими значениями. Вам нужно немного специальной обработки для встречного переполнения, но это довольно просто реализовать.

я успешно использовал эту технику на моделированиях - где производитель является циклом физики, и средство чтения является 3-м дисплеем.

5
ответ дан AShelly 26 November 2019 в 23:04
поделиться

Я поместил бы измененный () в каждом методе set, т.е. назвал бы закрытый метод вместо того, чтобы просто изменить флаг. Метод может затем установить флаг или сделать любая обработка необходима, например, это могло также уведомить любых наблюдателей.

4
ответ дан starblue 26 November 2019 в 23:04
поделиться

Интересная альтернатива явному dirty=true подход, хотя это - вероятно, излишество для большинства ситуаций и часто не применимое, должна была бы использовать защитные страницы. Установите страницу памяти как только для чтения (например, с VirtualProtect () в Windows) и поймайте сигнал/исключение, когда программа попытается записать в страницу. Сделайте запись, что страница была изменена, затем изменяет флаги защиты страницы к выполнению резюме и перезаписываемому.

Это - техника, обычно используемая операционными системами, чтобы определить, должна ли страница быть записана в файл подкачки, прежде чем это будет выселено из RAM.

2
ответ дан flodin 26 November 2019 в 23:04
поделиться

Вы можете захотеть посмотреть на переопределение gethashcode и равнозначное методам ваших доменных объектов и хранение оригинального хэшкода в хэш-таблетке по объектным ключам. Затем создайте процесс, который примет объект, найдет его ключ в хэш-таблице и сравнит значения хэшей.

  • Если хэш одинаков, то изменений нет. (не отправляйте в хранилище или базу данных)
  • если хэш отличается, то у объекта есть изменения. (обновление)
  • Если ключ не найден, то объект новый. (insert)
  • Не знаю, как определить, нужно ли удалять объект, кроме процесса удаления по запросу и не используя для этого отслеживание хэш-кода.

Я не пробовал этого, и хэш-табл может быть не лучшим способом отслеживания ключей/значений хэша объектов. Это сохранит память, отслеживая только хэш-коды и ключи. Я не уверен на 100%, но думаю, что некоторые операторы могут использовать этот метод в своих контекстах данных/объектах отслеживания.

-1
ответ дан 26 November 2019 в 23:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: