Proper design of Java Classes <p>My question is should I make <code>counterbore</code> (a recessed hole in a plate) a property of <code>plate</code> or should <code>counterbore</code> be a property of <code>joint</code> </p> <p>I have the following classes for an engineering analysis program:</p> <pre><code>Plate Bolt Washer Nut Material Coating </code></pre> <p>I then have classes that represent various Joints</p> <pre><code>TappedJoint (a joint were the bolt is threaded into the bottom plate) will have: Plate topPlate Plate bottomPlate Bolt bolt Washer topWasher BoltedJoint Plate topPlate Plate bottomPlate Bolt bolt Nut nut Washer topWasher Washer bottomWasher </code></pre> <p>The counterbore is only applicable on the <code>topPlate</code> but I need to do validation that the user enters a plate thickness greater than the depth of the counterbore. Do I just set counterbore to null in the bottomPlate or is it better to put the counterbore property in the joint class? Or perhaps I should be using some other pattern such as subclasses?</p> <p>Coating and Material I add as property to each part because it would be too verbose to add to a joint i.e.:</p> <pre><code> BoltedJoint Plate topPlate Plate bottomPlate Coating topPlateTopSurface Coating topPlateBottomSurface Coating bottomPlateTopSurface ...etc </code></pre> <p>I can probably get it to work with either scenario but perhaps their is better design?</p>