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...
