В настоящее время я разрабатываю приложение, которое анализирует и обрабатывает сообщения MIME, в которых эти сообщения являются центральной частью модели домена. Хотя я уже реализовал необходимую функциональность, на данный момент для анализа этих сообщений кажется ненужным пытаться заново изобрести колесо, если бы мне понадобилось добавить дополнительные функции MIME в будущем. Я мог бы просто использовать доступную библиотеку, такую как MimeKit, которая, вероятно, делает работу намного эффективнее и кажется более надежным способом go с. В то же время я чувствую нерешительность к этой идее по нескольким причинам:
Я довольно плохо знаком с архитектурой программного обеспечения, но из того, что я собрал в Интернете, похоже, что консенсус доменные объекты не должны иметь никаких внешних зависимостей, поскольку они моделируют домен, который определен для бизнеса c. И поэтому, если бизнес-правила меняются, было бы неплохо, если бы ваша модель предметной области зависела от внешней библиотеки. Тем не менее, поскольку MIME является стандартизированным протоколом, это не должно быть проблемой, но это приводит ко второму пункту.
Хотя MIME является стандартизированным протоколом, мне стало известно, что клиенты, от которых мое приложение получает эти сообщения, не всегда полностью соответствуют спецификациям RF C. Мне еще не приходилось сталкиваться с проблемой, касающейся формата сообщений MIME, но, учитывая это, я чувствую, что нет никакой гарантии, что я не столкнусь с проблемами в будущем.
Возможно, мне придется добавить дополнительные пользовательские функции, касающиеся анализа сообщений. Однако это можно решить, добавив эту функциональность поверх импортируемых классов.
Итак, мои вопросы:
Будет ли это в нормальных условиях допустимой альтернативой использованию внешняя библиотека для стандартизированных протоколов как часть модели предметной области? Неправильно навязывать мой домен и прикладной уровень внешним зависимостям.
Как мне go об этой проблеме с учетом моих обстоятельств? Должен ли я создать интерфейс для модели предметной области, чтобы я мог заменить его другой реализацией, если это потребуется в будущем? Это потребовало бы выделения внешних зависимостей в классе и сопоставления всех данных для соответствия контрактам для прикладного уровня, что почти кажется более трудоемким, чем реализация самого протокола. Или я должен сам реализовать его и добавлять новые функции последовательно, чтобы убедиться, что у меня есть полный контроль над моделью домена?
Я был бы очень признателен за ваш вклад.