如何为Express Delivery构建业务层 [英] how to build the bussiness layer for Express Delivery

查看:93
本文介绍了如何为Express Delivery构建业务层的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述


在我的项目中,我有一个问题是构建业务层来调用不同的快速服务提供商的API,例如UPS,Fedex,DHL ,EMS等。我需要调用一些服务,例如从每个服务提供商处获取交付号码,但是所有
他们都有不同的请求正文和响应结果。如何创建一个公共访问点以获得每个提供商的不同结果? 


我试图构建一个抽象类并定义一些常见的抽象方法,然后让它们每个Provider类都继承此抽象类并实现每个方法。但是,由于请求体和响应体的不同,我无法构建一个合适的
抽象方法,也无法使基本请求类和响应类转移到所需的值。


有人可以帮助我,非常感谢你。

解决方案

在我的项目中,我有一个问题是构建业务层来调用不同的快速服务提供商的API,例如UPS,Fedex,DHL,EMS等。我需要调用一些服务,例如从每个服务提供商处获取交付号码,但
所有这些都有不同的请求正文和响应结果。如何创建一个公共接入点,以获得每个提供商的不同结果?


它称为服务层。您可以为每个提供商提供SL,也可以为所有提供商提供SL。


此SL在解决方案的n层基础架构中使用WCF Web服务。


多年前我从下面的训练营获得了SL概念。


http://polymorphicpodcast.com/shows/mv-patterns/

使用System; 
使用System.Collections.Generic;
使用实体;

namespace ServiceLayer
{
public interface IServiceA
{
DTOStudent GetStudentById(Int32 id);
列表< DTOStudent> GetStudents();
void CreateStudent(DTOStudent dto);
void UpdateStudent(DTOStudent dto);
void DeleteStudent(Int32 id);
DTOEnrollment GetEnrollmentById(Int32 id);
列表< DTOEnrollment> GetEnrollments();
void CreateEnrollment(DTOEnrollment dto);
void UpdateEnrollment(DTOEnrollment dto);
void DeleteEnrollment(Int32 id);
}
}


使用System; 
使用System.Collections.Generic;
使用System.Linq;
使用实体;

namespace ServiceLayer
{
public class ServiceA:IServiceA
{
public List< DTOStudent> GetStudents()
{
var dtos = new List< DTOStudent>();

var client = new WCFServiceReference1.Service1Client();

dtos = client.GetStudents()。ToList();

if(dtos [0] .DtoResponse.Message!= null)
{
抛出新的异常(dtos [0] .DtoResponse.Message +"" + dtos [0] .DtoResponse.InnerException
+"" + dtos [0] .DtoResponse.StackTrace);
}

返回dtos;
}

public DTOStudent GetStudentById(Int32 id)
{
var client = new WCFServiceReference1.Service1Client();

var dto = client.GetStudentById(id);

if(dto.DtoResponse.Message!= null)
{
抛出新的异常(dto.DtoResponse.Message +"" + dto.DtoResponse.InnerException
+"" + dto.DtoResponse.StackTrace);
}

返回dto;
}
public void CreateStudent(DTOStudent dto)
{
var client = new WCFServiceReference1.Service1Client();

var dtor = client.CreateStudent(dto);

if(dtor!= null)
{
抛出新的异常(dtor.DtoResponse.Message +"" + dtor.DtoResponse.InnerException
+" ;" + dtor.DtoResponse.StackTrace);
}
}
public void UpdateStudent(DTOStudent dto)
{
var client = new WCFServiceReference1.Service1Client();

var dtor = client.UpdateStudent(dto);

if(dtor!= null)
{
抛出新的异常(dtor.DtoResponse.Message +"" + dtor.DtoResponse.InnerException
+" ;" + dtor.DtoResponse.StackTrace);
}
}
public void DeleteStudent(Int32 id)
{
var client = new WCFServiceReference1.Service1Client();

var dtor = client.DeleteStudent(id);

if(dtor!= null)
{
抛出新的异常(dtor.DtoResponse.Message +"" + dtor.DtoResponse.InnerException
+" ;" + dtor.DtoResponse.StackTrace);
}
}
public DTOEnrollment GetEnrollmentById(Int32 id)
{
var client = new WCFServiceReference1.Service1Client();

返回client.GetEnrollmentById(id);
}
公开列表< DTOEnrollment> GetEnrollments()
{
var dtos = new List< DTOEnrollment>();

var client = new WCFServiceReference1.Service1Client();

dtos = client.GetEnrollments()。ToList();

返回dtos;
}
public void CreateEnrollment(DTOEnrollment dto)
{
var client = new WCFServiceReference1.Service1Client();
client.CreateEnrollment(dto);
}
public void UpdateEnrollment(DTOEnrollment dto)
{
var client = new WCFServiceReference1.Service1Client();
client.UpdateEnrollment(dto);
}
public void DeleteEnrollment(Int32 id)
{
var client = new WCFServiceReference1.Service1Client();
client.DeleteEnrollment(id);
}
}
}


hi,

in my project, i have a problem to build the bussiness layer to call the APIs of different Express Service Provider, such as UPS, Fedex, DHL, EMS etc. I need to call some service such as getting delivery number from each Service Provider, but all of them have the different request body and response result. How can i make a common access point to  the get different result of each Provider? 

I have tried to build a abstract class and define some common abstract methods, and then let each Provider class inherits this abstract class and implements every method. But, due to different request body and response body, i couldn't build a proper abstract method, and also couldn't make a base request class and response class to transfer to needed values.

Could someone help me, thank you very much.

解决方案

in my project, i have a problem to build the bussiness layer to call the APIs of different Express Service Provider, such as UPS, Fedex, DHL, EMS etc. I need to call some service such as getting delivery number from each Service Provider, but all of them have the different request body and response result. How can i make a common access point to  the get different result of each Provider? 

It's called a Service Layer. You can have a SL for each provider, or you can have on SL for all providers.

This SL consumes a WCF Web service in the solution's n-tier infrastructure.

I got the SL concept many years ago from the below bootcamp.

http://polymorphicpodcast.com/shows/mv-patterns/

using System;
using System.Collections.Generic;
using Entities;

namespace ServiceLayer
{
    public interface IServiceA
    {
        DTOStudent GetStudentById(Int32 id);
        List<DTOStudent> GetStudents();
        void CreateStudent(DTOStudent dto);
        void UpdateStudent(DTOStudent dto);
        void DeleteStudent(Int32 id);
        DTOEnrollment GetEnrollmentById(Int32 id);
        List<DTOEnrollment> GetEnrollments();
        void CreateEnrollment(DTOEnrollment dto);
        void UpdateEnrollment(DTOEnrollment dto);
        void DeleteEnrollment(Int32 id);
    }
}

using System;
using System.Collections.Generic;
using System.Linq;
using Entities;

namespace ServiceLayer
{
    public class ServiceA : IServiceA
    {
        public List<DTOStudent> GetStudents()
        {
            var dtos = new List<DTOStudent>();

            var client = new WCFServiceReference1.Service1Client();

            dtos = client.GetStudents().ToList();
             
            if (dtos[0].DtoResponse.Message != null)
            {
                throw new Exception(dtos[0].DtoResponse.Message + " " + dtos[0].DtoResponse.InnerException
                    + " " + dtos[0].DtoResponse.StackTrace);
            }

            return dtos;
        }

        public DTOStudent GetStudentById(Int32 id)
        {
            var client = new WCFServiceReference1.Service1Client();

           var dto = client.GetStudentById(id);

            if (dto.DtoResponse.Message != null)
            {
                throw new Exception(dto.DtoResponse.Message + " " + dto.DtoResponse.InnerException
                    + " " + dto.DtoResponse.StackTrace);
            }

            return dto;
        }
        public void CreateStudent(DTOStudent dto)
        {
            var client = new WCFServiceReference1.Service1Client();

            var dtor = client.CreateStudent(dto);

            if (dtor != null)
            {
                throw new Exception(dtor.DtoResponse.Message + " " + dtor.DtoResponse.InnerException
                    + " " + dtor.DtoResponse.StackTrace);
            }
        }
        public void UpdateStudent(DTOStudent dto)
        {
            var client = new WCFServiceReference1.Service1Client();

            var dtor = client.UpdateStudent(dto);

            if (dtor != null)
            {
                throw new Exception(dtor.DtoResponse.Message + " " + dtor.DtoResponse.InnerException
                    + " " + dtor.DtoResponse.StackTrace);
            }
        }
        public void DeleteStudent(Int32 id)
        {
            var client = new WCFServiceReference1.Service1Client();

            var dtor = client.DeleteStudent(id);

            if (dtor != null)
            {
                throw new Exception(dtor.DtoResponse.Message + " " + dtor.DtoResponse.InnerException
                    + " " + dtor.DtoResponse.StackTrace);
            }
        }
        public DTOEnrollment GetEnrollmentById(Int32 id)
        {
            var client = new WCFServiceReference1.Service1Client();

            return client.GetEnrollmentById(id);
        }
        public List<DTOEnrollment> GetEnrollments()
        {
            var dtos = new List<DTOEnrollment>();

            var client = new WCFServiceReference1.Service1Client();

            dtos = client.GetEnrollments().ToList();

            return dtos;
        }
        public void CreateEnrollment(DTOEnrollment dto)
        {
            var client = new WCFServiceReference1.Service1Client();
            client.CreateEnrollment(dto);
        }
        public void UpdateEnrollment(DTOEnrollment dto)
        {
            var client = new WCFServiceReference1.Service1Client();
            client.UpdateEnrollment(dto);
        }
        public void DeleteEnrollment(Int32 id)
        {
            var client = new WCFServiceReference1.Service1Client();
            client.DeleteEnrollment(id);
        }
    }
}


这篇关于如何为Express Delivery构建业务层的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆