基于以下说明和示例,在分布式应用程序的不同层之间使用类型,对象和属性的准则和建议是什么?还要注意我使用多个单词作为架构概念,我不想让这个关于SOA或DDD看到我的实现没有遵循任何风格。
图层的对象和使用 UI(模型/资源) - > Web服务(请求响应) - >业务层(域实体/业务对象)。
对象解释及与图层的关系
用户界面(使用模型/资源)
Webservice (响应可以包含一个或多个模型/资源以及所需的任何其他属性)
业务层(返回包含一个或多个POCO业务/域实体的响应“与Web响应不同”,这将被映射回Web资源和响应)
我的业务层应该接受业务对象,还是可以使用下面的示例属性。
我的“web”图层具有请求和响应模式的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;
}
答案 0 :(得分:0)
UI 通过请求和响应与Web API /应用层进行通信。也称为模型/资源。
Web API /应用层通过DTO与商业/服务层进行通信。 DTO要么是扁平化对象,要么是业务实体。
业务层在存储库和逻辑之间使用业务实体。
帮助我的帖子 Should the repository layer return data-transfer-objects (DTO)?