Yürütülen yöntemin sonucu alın Şu anda basit bir sınama projesinde Transaction Komut Dosyası modelini (tam olarak Martin Fowler described'u kullanarak nasıl çalıştırmaya çalışıyorum), her şey iyi çalışıyor, sorun şu ki burada sorun yok ICommand arabiriminden miras alınan somut sınıfta belirtilen metotla ne zaman sonuç alacağını bilmek.Komut Kalıbı
Hangi işlevselliğe sahip olduğumu netleştirmek için size bir kod gösterelim. Ben adlandırılmış CalculateSalaryTS O zamanlar, beton komut sınıfına örneğini geçmesi gördüğünüz gibi
public class CalculateSalaryTS {
public void CalculateSalary(int _hour, int _salaryPerHour) {
Result = _hour * _salaryPerHour;
}
}
iCommand arayüzüne
public class CalculateSalaryCommand : ICommand
{
private readonly CalculateSalaryTS _salaryTs;
private readonly int _hour;
private readonly int _salaryPerHour;
public CalculateSalaryCommand(CalculateSalaryTS salaryTs, int hour, int salaryPerHour)
{
_salaryTs = salaryTs;
_hour = hour;
_salaryPerHour = salaryPerHour;
}
public void Execute()
{
_salaryTs.CalculateSalary(_hour, _salaryPerHour);
}
}
ve basit İşlem Senaryo sınıfından miras basit CalculateSalaryCommand dersim var Execute yönteminin içinde bu örnekten bir işlem yürütüyorum. Eh, her şey güzel görünüyor. ama bir tamsayı olması gereken yürütülmüş yöntemin sonucunu döndüremediğim bir problem var.
: Sonrapublic interface ITransactionResult<TResult>
{
TResult Result { get; set; }
}
CalculateSalaryTS sınıfı bu hale geldi: Bu sorunu işlemek için ben aşağıdaki gibi görünecektir olan her bir işlem genel ITransactionResult
arabiriminden miras gerektiğini İşlem Senaryo tabakasına bazı kodlar, eklemeye karar
public class CalculateSalaryTS : ITransactionResult<Int32> {
public void CalculateSalary(int _hour, int _salaryPerHour) {
Result = _hour * _salaryPerHour;
}
public int Result { get; set; }
}
Kullanımı:
var script = new CalculateSalaryTS();
var command = new CalculateSalaryCommand(script, 10, 20);
command.Execute();
Console.WriteLine("Salary is {0}", script.Result);
Bu yolun kendi sınırlaması olduğunu biliyorum ama bu durumu ele almak için bana başka bir fikir verene kadar hiçbir seçeneğim yok.
Şimdiden teşekkürler.
Dennis Yanıt için teşekkürler. Harika bir çözüm seçtiniz. Fakat modelin konseptlerini tasarlamanın yeni olmasından dolayı, ICommand davranışına ek işlevsellik eklemek konusunda kafam karışıyor. Doğru mu? – saber
Komutlarınızı gerektiği gibi genişletmenin bir sorun olduğunu düşünmüyorum. Tasarım Kalıpları, belirli ve yinelenen problemlerin nasıl çözüleceğine dair bir rehber niteliğindedir. Taşa değil, inşa edebileceğiniz bir temel oluşturuyorlar. Özel durumunuzda 'ICommandWithResult 'arayüzünü eklemeniz bile gerekmemektedir. ICommand'ı "Sonuç" özelliğini "CalculateSalaryClass" öğesine ekleyebilirsin. –
+1 Teşekkürler Dennis. Iam – saber