On 12 Sep 2015, at 17:34, Nicolai Hess <nicolaihess@web.de> wrote:
2015-09-09 14:32 GMT+02:00 Yuriy Tymchuk <yuriy.tymchuk@me.com <mailto:yuriy.tymchuk@me.com>>: Hi,
as NautilusMethodSelected contains also an information about protocol, class, package; NautilusProtocolSelected contains an information about class and package; . . .
Iâve inherited NautilusClassSelected from NautilusPackageSelected and NautilusProtocolSelected from NautilusClassSelected⦠to remove duplication. But as announcement subscription also includes itâs subclasses, if you subscribe to NautilusPackageSelected, you end up receiving also NautilusClassSelected, NautilusProtocolSelected and NautilusMethodSelected.
What is a good way to resolve this (I can simply separate all the classes, but maybe there is something important from conceptual point of view)?
I didn't know announcments are working that way, but it may make sense if you want to group announcments (register once for "WindowAnnouncement" and receiving all kind of subannouncements (WindowClosed/WindowOpened â¦)
I donât know about performance, but as far as I understand you can also subscribe to âWindowAnnouncement withAllSubclassesâ.
What we could do (maybe this is a bit overkill):
- make an announcements hierarchy (NautilusPackageAnnouncement -> NautiulusClassAnnouncement ...) but never subscribe to this Announcemnts - create sub classes for every "kind" NautilusPackageAnnouncement subclass: NautilusPackageChangedAnnouncement NautilusPackageAnnouncement subclass: NautilusPackageSelectedAnnouncement
NautilusClassAnnouncement subclass: NautilusClassSelectedAnnouncement NautilusClassAnnouncement subclass: NautilusClassChangedAnnouncement
And only subscribe to this subclasses. That way we are using the hierarchy of Announcement classes for removing of duplicated code, but only register and announce the "leaf"-nodes (NautilusClassChangedAnnouncement / NautilusPackageChangedAnnouncement...)
what do you think?
This may do. Also another option would be to have a NautilusSelectionAnnouncement with all 4 attributes, and then just subclass it for a different type. Uko
Uko