4 Aralık 2019 Çarşamba

Parameter Object

Giriş
Parameter Object Gof- Chain of Responsibility Örüntüsü yerine kullanılabilir
Parameter Object Gof- Command Örüntüsü yerine kullanılabilir.

1. Çok Fazla Parametre Geçmemek
Örnek
Elimizde şöyle bir kod olsun.
public class ProcessOptions
{
  public bool Capitalise { get; set; }
  public bool RemovePunctuation { get; set; }
  public bool Replace { get; set; }
  public char ReplaceChar { get; set; }
  public char ReplacementChar { get; set; }
  public char JoinChar { get; set; }
}
Şöyle yaparız
public string Process(ProcessOptions options, string text)
{
  if(options.Capitalise)
    text.Capitalise();

  if(options.RemovePunctuation)
    text.RemovePunctuation();

  if(options.Replace)
    text.Replace(options.ReplaceChar, options.ReplacementChar);

  var split = text.Split(options.SplitChar);

  string.Join(options.JoinChar, split);
}
2. Parametre Object İçinde Hesaplama Yapmak
Bu aslıdan bir çeşit Doman Object/Parameter Object karışımı bir şey

Örnek
Şöyle yaparız. Burada JobUploadCall bir parameter object nesnesi. sendJobMetaData() ve sendJobMultipart() metodları için gerek her hesaplama JobUploadCall parameter object içinde yapılıyor. Böylece Controller kodunda iş mantığına ait kod olmuyor.
public void submitJobFromJar(SubmitJobParameters submitJobParameters) {
  Path jarPath = submitJobParameters.getJarPath();
  JobUploadCall jobUploadCall = initializeJobUploadCall(submitJobParameters.getJarPath());

  // Send job meta data
  sendJobMetaData(jobUploadCall, submitJobParameters);
    
  // Send job parts
  sendJobMultipart(jobUploadCall, jarPath);
}

// This method is public for testing purposes.
public JobUploadCall initializeJobUploadCall(Path jarPath)
  throws IOException, NoSuchAlgorithmException {

  JobUploadCall jobUploadCall = new JobUploadCall();
  jobUploadCall.initializeJobUploadCall(client, jarPath);

  return jobUploadCall;
}

3. Parameter Object Yerine Farklı Metod İsimleri
Bazen de metodları farklı isimlere bölmek çok daha anlaşılır oluyor. Belirtilen miktarı başlangıç ve bitiş tarihine göre taksitlendiren bir metod için şöyle yaparız.
function getPaymentBreakdown(total, startDate, endDate) 
Belirtilen miktarı başlangıç tarihinden itibaren belirtilen ay kadar taksitlendiren bir metod için şöyle yaparız.
function getPaymentBreakdownByNoOfMonths(total, startDate, noOfMonths) 
Belirtilen miktarı başlangıç tarihinden itibaren belirtilen taksit miktarını dikkate alarak bitiş tarihini dönen bir metod için şöyle yaparız.
function getPaymentBreakdownByMonthlyPayment(total, startDate, monthlyPayment) 


Hiç yorum yok:

Yorum Gönder