Использование параметров и объектов в сервис-ориентированных приложениях

Основываясь на приведенном ниже объяснении и примере, каковы руководящие принципы и рекомендации по использованию типов, объектов и свойств между различными уровнями распределенного приложения? Также обратите внимание, что я использую более одного слова для обозначения архитектурной концепции. Я не хочу говорить об SOA или DDD, поскольку моя реализация религиозно не следует какому-либо стилю.

Слои и использование объектов Пользовательский интерфейс (модели / ресурсы) -> Веб-сервис (ответ на запрос) -> бизнес-уровень (сущности домена / бизнес-объекты).

Объяснение объектов и их связь со слоем

UI (использует модели / ресурсы)

Веб-сервис (ответ может содержать 1 или несколько моделей / ресурсов и любые другие необходимые свойства)

Бизнес-уровень (возвращает ответ "не такой же, как веб-ответ", содержащий 1 или несколько бизнес-объектов / доменов POCO, они будут сопоставлены с веб-ресурсом и ответом)

Должен ли мой бизнес-уровень использовать бизнес-объекты или я могу использовать свойства, как в примере ниже.

Мой «веб-уровень» в стиле RPC с шаблоном запроса и ответа передаст свойства запроса на уровень моего приложения (бизнес-уровень). Мой бизнес-уровень вернет объект ответа (тип принадлежит бизнес-уровню), который содержит несколько сущностей / бизнес-объектов домена POCO, он будет снова сопоставлен с ресурсами и ответом.

Мой веб-API / сервисный уровень

public Resources.InboundReceivingResponse Post(Resources.InboundReceivingRequest request)
    {
        Resources.InboundReceivingResponse response = new Resources.InboundReceivingResponse();
        Granite.DomainModel.Services.ServiceResponse serviceResponse = null;
        try
        {
            _service = new DomainModel.Services.ReceivingService();

            //calling business layer with request properties and returning response (business objects)  
            serviceResponse = _service.Receive(request.DocumentNumber, request.Barcode, request.TrackingEntityBarcode, request.LocationBarcode,
                request.MasterItemCode, request.ItemAliasCode, request.UOM, request.PackSize, request.Qty, request.UserID,
                request.PalletBarcode, request.Batch, request.SerialNumber, request.ExpiryDate, request.NumberOfLabels,
                request.NumberOfEntities, request.Comment, request.Reference);

           //Domain object to resource
            response.Document = new Resources.DocumentResponse();
            response.Document.DocumentHeader = serviceResponse.Document.MapToResource(); //Domain object to resource
            response.Document.DocumentLines = serviceResponse.Document.Detail.MapToResource();  //Domain object to resource

            return response;
        }
        catch (Exception ex)
        {
            Logger.LogException(ex, () => request, () => response, () => serviceResponse);
            throw new ApplicationException(ex.Message, ex);
        }
    }

Мой метод бизнес-уровня

public Services.ServiceResponse Receive(string documentNumber, string Barcode, string TrackingEntityBarcode, 
                string LocationBarcode, string MasterItemCode, string ItemAliasCode, string UOM, decimal PackSize, 
                decimal Qty, long UserID, string PalletBarcode, string Batch, string SerialNumber, DateTime? ExpiryDate, 
                int NumberOfLabels, long NumberOfEntities, string Comment, string Reference)
    {
            Services.ServiceResponse response = new ServiceResponse();
            //...logic
            response.Document = this.GetDocument(documentNumber); //this will map back to resource
            response.TrackingEntities = trackingEntities;//this will map back to resource
            return response;
}

person Francois Taljaard    schedule 18.08.2015    source источник
comment
Я обнаружил, что это связано с моим вопросом stackoverflow.com/questions/11975453/   -  person Francois Taljaard    schedule 18.08.2015
comment
stackoverflow.com / questions / 6310400 / is-this-a-right-use-of-dto / это прояснило мне,   -  person Francois Taljaard    schedule 20.08.2015


Ответы (1)


UI взаимодействует с веб-API / уровнем приложения с помощью запросов и ответов. Также называется Модели / Ресурсы.

Веб-интерфейс API / уровень приложения взаимодействуют с уровнем бизнеса / услуг с помощью DTO. DTO - это либо плоские объекты, либо бизнес-сущности.

Бизнес-уровень использует бизнес-объекты между репозиториями и логикой.

Помогшие мне сообщения Должен ли уровень репозитория возвращать объекты передачи данных (DTO)?

Это правильное использование DTO?

person Francois Taljaard    schedule 20.08.2015