yusufyilmazfr / tasarim-desenleri-turkce-kaynak

Türkçe kaynağa destek olması amacıyla oluşturulmuş bir kaynaktır. Konu anlatımının yanı sıra C#, Java, Go, Python, Kotlin ve TypeScript gibi birçok dilde tasarım desenlerinin uygulamasını içermektedir.
https://yusufyilmazfr.gitbook.io/tasarim-desenleri-turkce-kaynak/
3.28k stars 454 forks source link

Chain of Responsibility Tasarım Deseni Hatalı İşlenmiş #25

Open Natgho opened 2 years ago

Natgho commented 2 years ago

Anlatım kısmında kullanılan C# örneğinde abstract class içerisindeki boş bırakılan şu kısım: public abstract void HandleRequest(Image image); bir sonraki zincir var mı? varsa ilerle, yoksa None/boş dön şeklinde düzenlenmeli. Kod içeriğinde zincir kendi kendine tamamlanmalı ya da durmalıyken, if/else blokları ile döngü sağlanması bu tasarım deseninin yapısına aykırına. Yani 2 abstract class olarak ilerlenmesi daha sağlıklı olabilir.

  1. seviye abstract class -> temel 2 fonksiyonun barındırma zorunluğu
  2. seviye abstract class -> zincir oluşturan yapı
  3. seviye ise her bir zinciri temsil etmeli.
yusufyilmazfr commented 2 years ago

Hmm, okuduğum kitaba hızlıca baktım da şu şekilde göstermiş;

image

Bunu bizdeki örneğe göre ayarladığımızda aşağıdaki gibi mi olması gerekiyor diyorsun?

abstract class BaseHandler
{
    protected BaseHandler _nextHandler;
    public void SetNextHandler(BaseHandler nextHandler)
    {
        _nextHandler = nextHandler;
    }

    public void Handle(Image image)
    {
        HandleRequest(image);

        if(_nextHandler != null)
        {
            _nextHandler.Handle(image);
        }
    }

    public abstract void HandleRequest(Image image);
}
Natgho commented 9 months ago

Selamlar, 2 yıl gecikmeyle cevap vereyim =) Burada Python uyarlamasını görebilirsiniz. Eğer "_nextHandler" null ise bu sefer de None / null dönmesi gerekiyor.