Best practices for customising community modules

Greetings.

I am a module developer, and have been customising community modules and my own custom modules for nearly an year now. However, I would like to know a bit about the standard practices.

I would generally edit the presentation and service layer on the modules, generate corresponding module jar files and restart my application server. Is this approach a nice way to do the implementations?

Kindly suggest me reagarding the same.

When you talk about customising, do you mean adding new functionality that did not exist in these modules? Or do you mean changing existing behavior? Can you give some examples?