The concept behind UV unwrapping is to assign to every 3D vertex a 2D coordinate.
If you are working with a flat plane, the two approaches are nearly the same (generally a 2D software is more powerful).
If you're working with a 3D object, direct painting on the 3D mesh is gratifying but generally it's difficult to get a really powerful control of what you're actually doing.
Working on 2D UV unwrapped textures is more controlled but more complex, at first.
Like many tasks, you can reach your goal in many different ways: the complete path for texturing a cylinder is:
1) create seams on the mesh, unwrap it, assign an image texture (the seam will be visible)
2) delete seams, create new different seams and create a new UV map
3) bake the texture on a new image
4) doctor the new image in a 2D editor (seams to be doctored will be visible, don't touch image's boundries, as it would create new visible seams)
5) use the new image with the 2nd UV map
This complex procedure will assure a seamless texture in any situation, generally it can be avoided by hiding the seams in hidden places.
As you can understand there is no "better" or "old" way. It depends on your needs.
Personally, i stopped studying 3D paintings because even a simple open source software as GIMP let's me reach better results than Blender Paint capabilities.