Это проблема, с которой я боролся в ряде систем, но эта является хорошим примером. Это связано с тем, что одна система использует службы WCF из другой системы, и каждая система имеет свою собственную базу данных, но между двумя базами данных существуют взаимосвязи.
У нас есть центральная база данных, в которой хранятся записи всех документов компании. Эта база данных включает таблицы документов и папок и имитирует структуру файлов Windows. NHibernate заботится о доступе к данным, уровень домена обрабатывает логику (проверяет имена файлов / нет идентичных имен файлов в одной и той же папке и т. Д.), И на этом размещается уровень служб со службами с именем «CreateDocument (bytes [])», «RenameDocument (id»). , newName) ',' SearchDocuments (имя файла, размер файла, createDate) 'и т. д. Эти службы предоставляются с помощью WCF.
Система HR использует эти услуги. База данных HR имеет отдельную базу данных, имеющую внешние ключи к базе данных Document: она содержит таблицу HRDocument, которая имеет внешний ключ DocumentId, а затем специфичный для HR, такой как EmployeeId и ContractId.
Вот проблемы среди других:
1) Чтобы сохранить документ, мне нужно позвонить в службу WCF, чтобы сохранить его в центральной базе данных, вернуть идентификатор и затем сохранить его в таблице HRDocument (вместе с информацией о персонале). Из-за того, что вызов WCF и весь доступ к данным, относящимся к конкретному документу, выполняются в приложении Document, все это невозможно сделать за одну транзакцию, что может привести к возможной потере целостности транзакции.
2) Чтобы выполнить поиск, скажем, employeeId и creationDate, мне нужно вызвать службу поиска, передав в createDate (специфичные для базы данных поля), а затем выполнить поиск в базе данных HRDocument по идентификаторам возвращаемых записей, чтобы отфильтровать результаты. вернулся. Это кажется грязным, медленным и просто неправильным.
Я мог бы продублировать файлы сопоставления NHibernate в базе данных документов в DAL приложения HR. Это означает, что я мог бы указать отношения между HRDocument и Document. Это означает, что я мог бы присоединиться к таблицам и выполнять поиск таким образом, но это также означало бы, что мне пришлось бы дублировать доменную логику и нарушать принцип СУХОГО, и все это влечет за собой.
Я не могу не чувствовать, что я делаю что-то здесь не так и упустил что-то простое.