2015-01-21 7 views
1

У меня есть эти методыМожно ли использовать класс как параметр 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); 
} 

И хотят, чтобы реорганизовать его (ниже) на основе this и this

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 Вызывающий из других язык/технологии?
Они были бы привязаны к CustomerReportFilter и ProductReportFilter классам.

ответ

0

Поскольку я реализую этот API с помощью ASP.Net MVC, это JSON Binding автоматически преобразует строку JSON в сильно типизированный объект .Net. Таким образом, другой язык может вызывать этот API, используя свой клиент REST, а затем 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

+0

В функции build() строителя вы можете проверить правильность параметров. Даже если все параметры являются обязательными, использование Builder имеет смысл, так как легко случайно изменить параметры в таком длинном списке строк, тогда как Builder дает более легкую семантику. –

Смежные вопросы