Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
Natgho opened this issue Dec 20, 2021 · 2 comments
Open

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

Natgho opened this issue Dec 20, 2021 · 2 comments

Comments

@Natgho
Copy link
Contributor

Natgho commented Dec 20, 2021

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
Copy link
Owner

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
Copy link
Contributor Author

Natgho commented Dec 4, 2023

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants