Предотвращение циркулярной ссылки - PullRequest
0 голосов
/ 23 марта 2009

У меня есть проект-обертка, который я создал для общения со сторонним API.

В другом проекте давайте назовем его MyBusinessLayer.csproj. Он использует этот API, добавив проект-оболочку в качестве ссылки на проект, чтобы он мог использовать различные классы для вызова методов API через HttpRequest / HttpResopnse.

Теперь мне нужно выполнить массовое обновление, вызвав класс-оболочку UpdateRequest.cs и перебрав каждую из записей в нашей базе данных, и используя некоторые поля из каждой из этих записей, чтобы вызвать API-интерфейс для обновления каждой записи.

Проблема в следующем:

1) Я хочу создать как BulkUpdateRequest.cs в моем проекте оболочки.
2) Проблема в том, что он должен был бы взять общий список объектов в конструктор. Этот общий список объектов (записей, которые я извлекаю из нашей базы данных), .cs объекта находится в MyBusinessLayer.csproj, так как он представляет таблицу и экземпляр каждой записи для этой таблицы в моей БД. Если я отправлю общий список этих объектов в мою оболочку. Класс BulkUpdate.cs, который выполняет зацикливание и отправку запроса на обновление всех этих записей в общем списке, я только что ввел циклическую ссылку, потому что MyBusinessLayer.csproj ссылается на MyWrapperProject.csproj. А затем MyWrapperProject.csproj ссылается на класс в MyBusinessLayer.csproj, поскольку он принимает список экземпляров универсальных объектов, которые представляют записи в нашей БД.

Итак, я думаю, как лучше всего избежать циклической ссылки? Я думаю, что вместо этого я мог бы создать логику BulkUpdate в MyBusinessLogic.csproj, и таким образом я просто ссылаюсь на UpdateRequest.cs и выполняю цикл в каком-то классе, который создаю в MyBusinessLayer.cs, и использую только класс UpdateRequest.cs из нашей оболочки. проект и не отправлять какие-либо классы MyBusinessLayer в этот проект оболочки.

Надеюсь, это имеет смысл ...

1 Ответ

4 голосов
/ 23 марта 2009

Я собираюсь действовать в предположении, что «общий список объектов», на который вы ссылаетесь, имеет некоторый тип, определенный в вашем проекте MyBusinessLayer, а не System.Object. Я думаю, что ты так говоришь.

Решением было бы сделать так, чтобы MyBusinessLayer и MyWrapperProject зависели от третьего проекта (MyAbstractDefinitions), который содержал IDatabaseObject.cs, и любых других типов интерфейса, полученных из IDatabaseObject. Ни MyBusinessLayer, ни MyWrapperProject не должны зависеть от конкретной реализации этого объекта, который представляет записи в базе данных. Оба проекта должны зависеть от абстрактного определения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...