There should be no difference, the examples you've seen are probably written by someone with a mental model where 'subscribe' makes more sense, where you and I think 'notify' reads better. The one time where it might get cumbersome is if you have one Concat resource that has to notify dozens of other resources, so the Notify parameter ends up being a large array of resources. In that case the code might read better to put one Subscribe on each other resource, but that's personal preference.
I would not recommend you put your own requirements on concat::fragments, just let the Concat module sort out it's own dependencies. You can easily create loops, even through implicit relationships that aren't immediately obvious. For example here's two classes, one that manages the Gnome dconf file and one of my own that sets some of the settings I want, but I've decided I need dconf done first before the my_desktop class is finished:
*****************************************
$dconf_file = '/tmp/dconf'
class my_desktop {
concat::fragment { 'setting1':
target => $dconf_file,
}
service { 'some_stuff': }
}
class dconf {
concat { $dconf_file: }
}
include dconf
include my_desktop
Class[dconf] -> Class[my_desktop]
*****************************************
That doesn't work so well.