Dart - TypeScript'teki gibi bir arayüz nasıl tanımlanır?


Ben Typescript'ten geliyorum ve TypeScript'te bir nesnenin arayüzünü şu şekilde tanımlayabilirdim:

export interface Locale {
  login: {
    title: string;
    actions: {
      submit: string;
      forgot: string;
    }
  }
}

Dart'ın arabirimleri kaldırdığını ve bunun yerine tüm sınıfların gizli arabirimlere sahip olduğunu anlıyorum

Yukarıda bahsettiğim arayüzü şu şekilde yazarak uygulamaya çalıştım:

class BaseLoginActionsLocale {
  final String submit;
  final String forgot;

  BaseLoginActionsLocale({this.submit, this.forgot});
}

class BaseLoginLocale {
  final String title;
  final BaseLoginActionsLocale actions;

  BaseLoginLocale({this.title, this.actions});
}

class BaseLocale {
  final BaseLoginLocale login;

  BaseLocale({this.login});
}

...

final BaseLocale enLocale = BaseLocale(
  login: BaseLoginLocale(
    title: 'Login',
    actions: BaseLoginActionsLocale(
      submit: 'Login',
      forgot: 'Forgot Password?'
    )
  )
);

Ama bence bu çok fazla standart taslak gibi.

Yani benim sorum şu: Bir int’i uygulamanın daha iyi bir yolu var mı?

Cevap #1

BaseLocale'a tüm değerlerinizi geçirmek için bunu şu şekilde uygulayabilirsiniz:

class BaseLoginActionsLocale {
  final String submit;
  final String forgot;

  BaseLoginActionsLocale(this.submit, this.forgot);
}

class BaseLoginLocale {
  final String title;
  final BaseLoginActionsLocale actions;

  BaseLoginLocale(this.title, submit, forgot) : actions = new BaseLoginActionsLocale(submit, forgot);
}

class BaseLocale {
  final BaseLoginLocale login;

  BaseLocale(title, submit, forgot) : login = new BaseLoginLocale(title, submit, forgot);  
}

final BaseLocale enLocale = BaseLocale('Login', 'Login', 'Forgot Password?');

Bu yaklaşımın, BaseLocale'in bağımlılıklarının özelliklerini (ve dolaylı olarak implementasyonu) bilmesinden sorumlu hale getirdiğini ve bazıları tarafından bir anti-pattern olarak değerlendirilebileceğini unutmayın...