Логика домена на уровне обслуживания - как лучше всего ссылаться на нее, так и выставлять ее

Я разрабатываю корпоративное решение, которое состоит из модульных продуктов в диапазоне продуктов, используя код Entity Framework, сначала для определения модели домена и обеспечения доступа к данным.

например. Решения:

ProductRange.Authentication
ProductRange.Gateway
ProductRange.OrderSystem
ProductRange.MarketingSystem

Каждый из этих продуктов (решений) будет иметь похожие слои, в настоящее время:

Проекты в каждом решении:

ProductRange.OrderSystem.Model (contains code first POCOs)
ProductRange.OrderSystem.DataContext (contains the dbContext)
ProductRange.OrderSystem.DataAccess (contains the Generic Repository)
ProductRange.OrderSystem.Service.DomainLogic (contains business logic)
ProductRange.OrderSystem.Service.ApplicationLogic (contains application logic)
ProductRange.OrderSystem.Presentation.AdminWebsite
ProductRange.OrderSystem.Presentation.CustomerWebsite

Некоторым продуктам необходимо будет получить доступ к логике домена другого продукта, особенно всем им необходимо будет получить доступ к ProductRange.Authentication, а также ProductRange.MarketingSystem потребуется запросить ProductRange.OrderSystem

Я собираюсь разоблачить логику домена между продуктами в диапазоне через службу WCF. Но мне также нужно будет ссылаться на продукт локально (например, создавать ссылки на проект).

Как мне это реализовать? Должен ли я создать службу WCF, например. ProductRange.OrderSystem.WCF, который вызывает логику домена и предоставляет ее, или должна ли моя логика домена быть службой WCF? Если бы последний, мне всегда приходилось ссылаться на свою логику домена через WCF, даже из локальной ApplicationLogic?

Я предполагаю, что я ищу некоторые рекомендации о том, какие слои должны иметь и как лучше всего обеспечить межсоединение между решениями.

1 ответ

Вы можете использовать один (или несколько) слой, чтобы выставлять свои pocos как datacontracts и контракты на обслуживание.

например:

ProductRange.Server.DataContracts
 Product
 AuthenticationInfo
ProductRange.Server.ServiceContracts
 IOrderService
 IAuthentication
 Auth(AuthenticationInfo info):AuthenticationResult
ProductRange.Server.Services
 OrderService
 AuthenticationService(implements IAuthentication interface)

На стороне клиента вы можете ссылаться на этот проект (только контракты данных и контракты на обслуживание) и создавать прозрачные прокси-интерфейсы, например:

var serviceProxy = SomeHelper.CreateServiceProxy<iauthenticationservice>();
var result = serviceProxy.Auth(new AuthenticationInfo());
</iauthenticationservice>

Кроме того: вы можете использовать свои классы poco в качестве контрактов с данными. Если вы хотите улучшить соединение, вы выбираете привязку (например, net.tcp) для своих требований.

licensed under cc by-sa 3.0 with attribution.