2015-07-20 3 views
1

У нас есть 2 службы, такие как уровень бизнес-логики как служба (WEBAPI) и DAL в качестве сервиса (WEBAPI). у нас есть Клиент, который взаимодействует с бизнес-уровнем и бизнес-уровнем, взаимодействует с уровнем данных (службой). Наш DAL является независимым от схемы, а слой DAL не содержит объект DTO (классы). DAL получает данные из считывателя данных и преобразуется в объекты Expando и возвращается в BLL, BLL-уровень конвертирует полученные объекты Expando в объекты DTO. Этот подход отлично работает, если данные малы менее 500 тыс., Но этот подход не удается из-за размера или времени и т. Д. Поэтому я думаю, что есть способ передать func <> или делегировать уровень сервиса DAL из уровня BLL, этот func <> будет оценен на уровне DAL, я передам свою логику преобразования в объект в моем анонимном делетете/func <>, а также некоторую логику. Мой вопрос в архитектурном отношении, возможно, это не лучший подход, но я хотел бы знать, есть ли способ передать делегату параметр к другой службе и выполнить этот делегировать в контексте сервиса.Как передать анонимного делегата на webapi/service

ответ

1

Вы не можете передать делегат через любой из форматов, поддерживаемых WebAPI изначально. Исполняемый код трудно отправить на другой компьютер.

Вам нужно решить это другим способом. Возможно, вы можете идентифицировать методы, используя строки (например, «FilterByGoldCustomerStatus»), и сервер интерпретирует эту строку.

Из эскиза архитектуры, который вы дали, неясно, почему вы должны иметь DAL и BLL, разделенные протоколом на основе HTTP. Может быть, ваш DAL должен быть просто DLL, который использует BLL ?! Затем вы можете легко передать делегаты и деревья выражений.

Откровенно говоря, архитектура кажется довольно сложной (много слоев, границы RPC, expandos, ...). Не может ли это сделать проще?

+0

спасибо usr. мы используем Micro Services для нашего приложения, у нас есть уровень BLL и DAL, размещенный на разных серверах, то есть наши BLL и DAL являются отдельными проектами WEB API. мы собираемся с этой архитектурой, потому что мы хотели бы иметь меньшие и независимые единицы развертывания. Если в слое DAL есть изменения, я буду развертывать только службу DAL и не развертывать BLL Layer, поскольку моя DAL не зависит от схемы. Можно ли использовать RPC-вызов здесь – user145610

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