> From: Sascha Manns <sascha.ma...@mailbox.org> > Sent: Wednesday, 3 May 2017, 16:00 > Subject: Re: [Vala] Use defined pathes inside a method
> > interface and not the whole configuration object. > I prepared that config.vala [1]. > can't used because of it itn't instancable. But how can i work with such > pathes instead? > Also i added a metod which imports the settings from the gsettings > schema and connects this to its properties from the interface. Is the > implementation usable in that case? It would be great, that the > gsettings and the defined pathes are useable inside each other class. An interface is an abstraction, so you need a configuration object that implements the interface. Having one big interface that matches your configuration object just duplicates your effort. The suggestion was to break the interfaces into smaller parts so the configuration object implements multiple interfaces. For a little more detail see: https://martinfowler.com/bliki/HeaderInterface.html https://martinfowler.com/bliki/RoleInterface.html So you could have a FilePathsForSaving and a AuthorContactDetails interface that are both implemented by your configuration object. When you come to use them you only need a subset of the configuration object. So you could have a method: void save_my_work (Work work_object, FilePathsForSaving my_big_configuration_object) {...} The advantage is that each method only needs a subset of the data and it means you can feed alternative objects in, so long as they implement the same interface. That could be useful for testing individual components of your application. So if you want to write a test of the save_my_work() command then you can feed in paths in a temporary directory and check the relevant data is saved without having to construct a whole configuration object, just the FilePathsForSaving. An alternative would be to have smaller objects as fields of the configuration object. So instead of PublisherSettings having: public string firstname { get; set; } public string surname { get; set; } ... you could have: public AuthorContactDetails author_contact_details; and then the AuthorContactDetails object has properties for the name, etc. Your GSettings method should probably take the configuration object as an argument, e.g. : void modify_configuration_from_gsettings (ref PublisherSettings my_big_configuration_object) {...} this also gives you the flexibility to set the configuration from other user interfaces: void modify_configuration_from_command_line (ref PublisherSettings my_big_configuration_object, ref unowned string[] args) {...} If you need more ideas take a look at other projects, this is how Geary handles it: https://git.gnome.org/browse/geary/tree/src/client/application/geary-config.vala BTW, I don't think you want a new MainLoop in your GetGSettings function: https://github.com/saigkill/gnome-publisher/blob/master/src/config.vala#L82 All the best, Al _______________________________________________ vala-list mailing list vala-list@gnome.org https://mail.gnome.org/mailman/listinfo/vala-list