繰り返しを避けるために、これらのメソッドをより機能的なスタイルで結合/マージ/短縮するにはどうすればよいですか?これは、あなたが、単一のオーバーロードされたメソッドを使用することができます繰り返しを避けるために構造的に類似のメソッドをマージする
public static Task<T> GetAsyncHandler(string urlFormat, params object[] args)
{
string url = string.Format(urlFormat, args);
return Task<T>.Run(() => { return GetAsyncHandlerForRestApi(url)});
}
:あなたは、引数としてジェネリック型、URL形式とオブジェクトのPARAMの配列を受け取るメソッドを作成して、オーバーロードすることができます
public Task<List<UsageSummaryModel>> GetBilledUsageSummary(int accountId, string billingRunId)
{
var url = string.Format("{0}{1}/{2}/usage", BaseUrl, accountId, billingRunId);
return GetAsyncHandlerForRestApi<List<UsageSummaryModel>>(url);
}
public Task<GetSampleInvoiceRunIdResponse> GetUnBilledUsageSampleRunId(int accountId)
{
var url = string.Format("{0}{1}/sample?usageonly=true", BaseUrl, accountId);
return GetAsyncHandlerForRestApi<GetSampleInvoiceRunIdResponse>(url);
}
public Task<List<UsageSummaryModel>> GetUnBilledUsageSummary(int accountId, int sampleRunId)
{
var url = string.Format("{0}{1}/sample/{2}/usage", BaseUrl, accountId, sampleRunId);
return GetAsyncHandlerForRestApi<List<UsageSummaryModel>>(url);
}
public Task<List<CallDetailsRecordModel>> GetBilledCallDetailRecords(int accountId, int billingRunId, int cdrSummaryId, int page, int pageSize)
{
var url = string.Empty;
if (page == -1 && pageSize == -1)//load all records
{
url = string.Format("{0}{1}/{2}/usage/{3}", BaseUrl, accountId, billingRunId, cdrSummaryId);
}
else
{
url = string.Format("{0}{1}/{2}/usage/{3}?page={4}&pageSize={5}", BaseUrl, accountId, billingRunId, cdrSummaryId, page, pageSize);
}
return GetAsyncHandlerForRestApi<List<CallDetailsRecordModel>>(url);
}
public Task<List<CallDetailsRecordModel>> GetUnBilledCallDetailRecords(int accountId, int sampleRunId, int cdrSummaryId, int page, int pageSize)
{
var url = string.Empty;
if (page == -1 && pageSize == -1)//load all records
{
url = string.Format("{0}/{1}/SAMPLE/{2}/usage/{3}", BaseUrl, accountId, sampleRunId, cdrSummaryId);
}
else
{
url = string.Format("{0}/{1}/SAMPLE/{2}/usage/{3}?page={4}&pageSize={5}", BaseUrl, accountId, sampleRunId, cdrSummaryId, page, pageSize);
}
return GetAsyncHandlerForRestApi<List<CallDetailsRecordModel>>(url);
}
'int billingRunId'と' string billingRunId'の理由はありますか? –
はい、ただし、わかりやすくするため、どちらか一方のデータタイプを保持しています –
コードレビューに含まれているため、この質問を閉じるトピックに投票していますstackexchange –