Should the shield be a component that houses other components?
Maybe not houses other components, but controls the lifetime of sub components. So in some rough pseudo code, your client code would add this "shield" component.
class Shield : Component
{
void Start() // happens when the component is added
{
sprite = thisentity.add_component<Sprite>( "shield" );
collider = thisentity.add_component<Collider>( whatever );
//etc
}
void OnDestroy() // when the component is removed
{
thisentity.remove_component( sprite );
thisentity.remove_component( collider );
}
void Update() // every tick
{
if( ShouldRemoveSelf() ) // probably time based or something
thisentity.remove_component( this );
}
}