Я строю систему, которая будет иметь несколько каналов, питающих разных клиентов (MonoDroid, MonoTouch, Asp.Net Mvc, REST API)
Я пытаюсь принять архитектуру SOA, а также пытаюсьпринять модель постоянства по достижимости (http://www.udidahan.com/2009/06/29/dont-create-aggregate-roots/)
. Мой вопрос относится к проектированию архетектуры. Как наилучшим образом разделить систему на отдельные фрагменты, чтобы извлечь выгоду из SOA.
В моей модели естьSystemImplementation, которая представляет собой установку самой системы, а также сущность Account.
То, как я изначально задумывался об этом, заключалось в создании служб в виде:
- SystemImplementationService -отвечает за управление вещами, связанными с самой установкой, такими как брендинг, регистрация трафика и т. д.
- AccountService - отвечает за управление активами пользователей (медиа, сеть контактов и т. д.)
Логическирегистрация новой учетной записи пользователя будет происходить в AccountService.RegisterAccount
, где сервисмы можем позаботиться о проверке новой учетной записи (проверка дублированного имени пользователя и т. д.), хэшировании pw и т. д.
Однако, чтобы добиться постоянства и достижимости, мне нужно добавить новую учетную запись в коллекцию SystemImplementation.Accounts
чтобы он автоматически сохранялся в службе SystemImplementation (используя nhibernate, я могу использовать lazy = extra, чтобы при добавлении новой учетной записи в коллекцию автоматически не загружались все учетные записи)
Чтобы это произошло, я 'Возможно, мне потребуется создать учетную запись в AccountService, передать обратно несохраненную сущность клиенту, а затем вызвать клиент SystemImplementation.AssociateAccountWithSystemImplementation
, чтобы мне не нужно было вызывать службу SystemImplementation из AccountService (какпоправьте меня, если я ошибаюсь - это плохая практика)
Тогда у меня вопрос - неправильно ли я делю систему?Если так, как я должен разделить систему?Есть ли методология для определения способа разделения системы для SOA?Можно ли вызывать службу WCF из службы:
AccountService.RegisterAccount
-> SystemImplementation.AssociateAccountWithSystemImplementation
Я беспокоюсь, что собираюсь начать строить систему на основе некоторыхантипаттерны, которые придут, чтобы поймать меня позже:)