I ve been doing a lot of work on reuse and generic, infrastructure components lately. During this work I have also been reading about business objects and business process objects. We systems people love reuse, especially code-level reuse. I guess we feel incredibly efficient whenever we find a chunk of code of code that we can reuse instead of creating it ourselves. Reuse doesn t have to be limited to code reuse, though.
Design patterns are a good example of a form of reuse.
We extract the common behaviour from a series of things and realize that it can be applied to a whole bunch of other things. When we are designing systems and we recognize a pattern, we can apply our knowledge of the pattern to the solution. The advantage is that our solutions exhibit a lot of the same behaviour so it is easier to learn how they work. The disadvantage is that there is work involved in extracting a pattern and creating the rules for applying that pattern in other situations. Someone has to extract the common behaviour from a given set of circumstances.