Агрегируется и Репозиторий. То, как определить, агрегируется?

полностью RFC 822 совместимый regex неэффективен и неясен из-за его длины. К счастью, RFC 822 был заменен дважды, и текущая спецификация для адресов электронной почты RFC 5322 . RFC 5322 приводит к regex, который может быть понят, если изучено в течение нескольких минут и достаточно эффективен для фактического использования.

Один RFC 5322 совместимый regex может быть найден в верхней части страницы в http://emailregex.com/ , но использует шаблон IP-адреса, который плавает вокруг Интернета с ошибкой, которая позволяет 00 для любого из неподписанных десятичных значений байта в разграниченном точкой адресе, который недопустим. Остальная часть это, кажется, согласовывается с грамматикой RFC 5322 и проходит несколько тестов с помощью grep -Po, включая доменные имена случаев, IP-адреса, плохие и имена учетной записи с и без кавычек.

Исправление 00 ошибка в шаблоне IP, мы получаем работу и довольно быстрый regex. (Очистите представленную версию, не скидку с цены, для фактического кода.)

(?: [a-z0-9! % $ # &';* + / =?^ _ '{|} ~-] + (?:\. [a-z0-9! % $ # &';* + / =?^ _ '{|} ~-] +) * | "(?: [\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f] | \\[\x01-\x09\x0b\x0c\x0e-\x7f]) *") (?: (?: [a-z0-9] (?: [a-z0-9-] * [a-z0-9])? \.) + [a-z0-9] (?: [a-z0-9-] * [a-z0-9])? | \[(?: (?: (2 (5 [0-5] | [0-4] [0-9]) |1 [0-9] [0-9] | [1-9]? [0-9])) \.) {3} (?: (2 (5 [0-5] | [0-4] [0-9]) |1 [0-9] [0-9] | [1-9]? [0-9]) | [a-z0-9-] * [a-z0-9]: (?: [\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f] | \\[\x01-\x09\x0b\x0c\x0e-\x7f]) +) \])

Вот схема конечный автомат для вышеупомянутого regexp, который более ясен, чем сам regexp enter image description here

, более сложные шаблоны в Perl и PCRE (regex пользовавшаяся библиотека, например, в PHP) могут правильно синтаксический анализ RFC 5322 без помехи . Python и C# могут сделать это также, но они используют различный синтаксис от тех первых двух. Однако, если Вы вынуждены использовать один из многих менее мощных языков сопоставления с образцом, тогда it’s лучше всего для использования реального синтаксического анализатора.

также важно понять, что проверка его на RFC абсолютно ничего не говорит Вам о том, существует ли тот адрес на самом деле в предоставленном домене, или является ли человек, вводящий адрес, его истинным владельцем. Люди заключают контракт с другими под списками рассылки этот путь все время. Фиксация, которая требует более необычного вида проверки, которая включает отправку, которые обращаются к сообщению, которое включает маркер подтверждения, означала вводиться в ту же веб-страницу, как был адрес.

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

Для PHP, Вы должны не , используют шаблон, данный в [1 111], Проверяют АДРЕС ЭЛЕКТРОННОЙ ПОЧТЫ с PHP, Правильный Путь , из которого я заключаю в кавычки:

существует некоторая опасность, что общее использование и широко распространенное неаккуратное кодирование установят фактический стандарт для адресов электронной почты, который более строг, чем зарегистрированный формальный стандарт.

, Который является не лучше, чем все другие шаблоны не-RFC. Это isn’t, даже достаточно умный для обработки даже RFC 822 , уже не говоря о RFC 5322. Этот , однако.

, Если Вы хотите стать необычными и педантичными, , реализуют полный механизм состояния . Регулярное выражение может только действовать как элементарный фильтр. Проблема с регулярными выражениями состоит в том, что сообщение кому-то, что их совершенно допустимый адрес электронной почты недопустим (положительная ложь), потому что Ваше регулярное выражение не может обработать его, просто грубо и невежливо с точки зрения пользователя. Механизм состояния для цели может и проверить и даже исправить адреса электронной почты, которые иначе считали бы недопустимыми, поскольку это демонтирует адрес электронной почты согласно каждому RFC. Это допускает потенциально более приятный опыт, как [1 136]

, указанный адрес электронной почты 'myemail@address,com' недопустим. Вы имели в виду 'myemail@address.com'?

См. также Адреса электронной почты Проверки , включая комментарии. Или Сравнение Адреса электронной почты, Проверяющего Регулярные выражения .

Regular expression visualization

Демонстрация Debuggex

5
задан Etzeitet 5 August 2009 в 01:15
поделиться

1 ответ

Шаблон репозитория определен довольно слабо и не обязательно имеет какое-либо отношение к шаблону агрегирования. Однако, если вы подписываетесь на способ работы с DDD, то да, репозитории уникальны для агрегатов.

Итак, давайте посмотрим на это с точки зрения DDD. DDD сообщает, что объекты внутри агрегата могут иметь ссылку на другой корень агрегата, но к объектам внутри агрегата можно получить доступ только через корень. Эмпирическое правило для определения агрегатов - то, что следует удалить при удалении корня. Однако DDD не поощряет использование отношений больше, чем большинство методологий, говоря, что только потому, что отношения существуют в домене, они не обязательно должны существовать в вашей модели домена, поэтому просто имейте это в виду.

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

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

может содержать отношение ко всем своим сообщениям, потому что сообщение является совокупным корнем. Вы также можете реализовать этот метод в PostRepository, чтобы получить все сообщения данного пользователя. Надеюсь, это поможет!

может содержать отношение ко всем своим сообщениям, потому что сообщение является совокупным корнем. Вы также можете реализовать этот метод в PostRepository, чтобы получить все сообщения данного пользователя. Надеюсь, это поможет!

4
ответ дан 15 December 2019 в 01:08
поделиться
Другие вопросы по тегам:

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