2015-01-21 57 views
1

我有这些方法可以使用class作为API参数吗?

public class ReportService 
{ 
    public DataTable GetCustomerReportDataTable(String dateFrom, String dateTo, String cif, String customerName, String region, String branch, String salesCode); 
    public DataTable GetProductReportDataTable(String dateFrom, String dateTo, String cif, String customerName, String product, String region, String branch, String salesCode); 
} 

并希望将其重构基于thisthis(下)

public class CustomerReportFilter 
{ 

    public String DateFrom { get; set; } 
    public String DateTo { get; set; } 
    public String CIF { get; set; } 
    public String CustomerName { get; set; } 
    public String Region { get; set; } 
    public String Branch { get; set; } 
    public String SalesCode { get; set; } 
} 

public class ProductReportFilter 
{ 

    public String DateFrom { get; set; } 
    public String DateTo { get; set; } 
    public String CIF { get; set; } 
    public String CustomerName { get; set; } 
    public String Product { get; set; } 
    public String Region { get; set; } 
    public String Branch { get; set; } 
    public String SalesCode { get; set; } 
} 

public class ReportService 
{ 
    public DataTable GetCustomerReportDataTable(CustomerReportFilter filter); 
    public DataTable GetProductReportDataTable(ProductReportFilter filter); 
} 

问:

什么,如果API调用者是从其他语言/技术?
他们会被绑定到CustomerReportFilterProductReportFilter类。

回答

0

当我使用ASP.Net MVC实现这个API时,JSON绑定会自动将JSON字符串转换为强类型的.Net对象。因此,不同的语言可以使用其REST客户端调用此API,然后POST一个JSON字符串。

对于Java等其他语言,我读过RESTful Java client with java.net.URL

我假设绑定到API参数类是没有问题的,因为自动转换器。

-1

我不确定你在问什么,但对于你的功能Builder模式是合适的。

Report.Builder builder = new Report.Builder(); 
builder.setDateFrom(...).setDateTo(...).setCif(...); 
DataTable tbl = builder.build(); 

这种方式你永远不会混淆你的字符串顺序,并可以省略任何可选的字符串。

+0

如果我创建构建器,如果将参数更改为属性,则基本相同。这意味着它是可选的,不是吗?如果我想使所有参数都是强制性的。没有IsNullOrEmpty检查合适的生成器模式? – asakura89 2015-01-21 08:35:37

+0

在构建器的build()函数中,您可以检查参数的有效性。即使所有参数都是强制性的,使用Builder也是有意义的,因为在这么长的字符串列表中意外错误地放置参数很容易,而Builder则更容易产生语义。 – 2015-01-21 08:48:59

相关问题