title: Can an aggregates invariant include a rule based on information from elsewhere?
body: <p>In DDD can an aggregates invariant include a rule based on information in a another aggregate?  Now I don't think so, however this causes me a problem and I don't know how to solve it.</p>
  
  <p>I have an entity called Asset (equipment) which I'm modelling as the root of an aggregate.  It has a list of Tags (properties) that describe things like Manufacturer, Model etc.  It stores the identity of second aggregate called AssetType which has a list of TagTypes, of which some can be marked as mandatory.</p>
  
  <p>Now it appears to me that one of the invariant conditions for Asset should make a reference to the associated AssetType to enforce non null values in the list of mandatory tags.  But my guts are crawling with the thought of how I am going to enforce consistency.</p>
  
  <p>Does this mean the aggregate should really comprise all four entities?  If the root were to be AssetType and it had a list of Assets under it, it could solve my problem, however this is not going to fit very well with a core use case which has other aggregates maintaining lists of different types of Asset.  Asset really has to be the root otherwise I'm going to have problems.</p>
  
  <p>And AssetType can't very well go inside the Asset aggregate either.  This seems just as absurd.</p>
  
  <p>My guts still says Asset and AssetType are two separate aggregates, but how do I resolve the consistency problems?  Or have I got my invariant wrong?</p>