2011-08-17 8 views
2

Каков наилучший способ решить эту проблему.Лучшая практика использования круговой зависимости

У меня есть проекты следующих проектов:

Модель

Logic (модель ссылки)

синхронизации (ссылки как модель и логика)

Web (ссылки все проекты)

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

Что было бы самым простым способом заставить все это работать?

Еще немного о проекте синхронизации. Синхронизация работает сама по себе. Он запускает процессы, которые переносят данные из внешней базы данных в базу данных в моем приложении. Он делает это, создавая объекты на основе модели и сохраняя их с помощью логики. Это прекрасно работает и дает нам возможность просто создать другой проект/сборку синхронизации, который может сделать то же самое, но нацелен на совершенно другой тип базы данных.

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

+0

Что такое синхронизация? – sll

+0

Я обновил свой вопрос с некоторым объяснением логики. – Tys

ответ

3

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

+0

Я обновил свой вопрос, объяснив немного больше, что делает синхронизация. Дело в том, что мы хотим сохранить, что sync.project отделен от остальных. Этот проект взаимодействует с внешней базой данных. И если мы сохраним все в этом проекте, мы сможем легко создать еще один аналогичный проект, который сделает то же самое для другого типа базы данных/веб-службы. – Tys

+0

Тогда я бы спросил, почему Синхронизация должна ссылаться на Logic. Вы можете выиграть, сделав Synchronization dumber - сделайте это как раз о транспорте взад и вперед. Проверьте места, в которых синхронизация обращается к логике и оценивает, не будут ли эти фрагменты лучше соответствовать друг другу. Все, что вам действительно нужно синхронизировать, - это чужие данные и как их поместить в локальную модель. –

+0

Привет, Джейкоб. Это займет много работы, но мне нравится идея сделать все это глупее. Поэтому я иду на этот маршрут. Благодаря! – Tys

0

Либо:

  1. Что-то не так, и вы должны реорганизовать неправильные зависимости/ссылки
  2. времени представить новый проект под названием л, как Common (если у вас уже есть 4 проекта довольно высокого уровня, я бы поставил на # 1 - попытаться выяснить, почему Synchronizaiton ссылается логика и логика референции синхронизации в то же время)
0

Создать новый проект «NewProject» и поставить этот метод «или класс, который держит его» в том, что это,затем добавьте его в качестве ссылки на Synchronization и Logic.

0

Почему бы не переместить метод, который логике требуется для проекта Logic? Синхронизация может затем вызвать метод в Logic, поскольку он ссылается на Logic.

Конечно, я предполагаю, что в Синхронизации нет целого ряда других кодов, которые требуется для этого метода. Если есть, то, возможно, пришло время для пятого проекта, возможно, названного «Утилита» или «Обыкновенный».

Существует также возможность того, что Синхронизация и Логика нуждаются в подобных методах, но не совсем одинаково, и в этом случае вы делаете два отдельных метода: по одному в каждом проекте.

Смежные вопросы