Ajuda com Maquina de Estados e Encapsulamento

Bom é o seguinte, postei em três fóruns diferentes sobre as duvidas que eu tenho e nao tive retorno

http://social.msdn.microsoft.com/Forums/pt-br/vscsharppt/thread/13390785-2685-46ed-b6b7-0431a043adc8
http://www.unidev.com.br/phpbb3/viewtopic.php?f=61&t=54420
http://stackoverflow.com/questions/8297246/finite-state-machine-and-enclosing

Mesmo pra quem não goste de programção de jogos, acho que minha duvida é válida ja que trata-se de Encapsulamento e DDD

depois que eu vi um video do giovanni bassi sobre DDD e artigos sobre Tell Dont ask, eu percebi que tem um monte de projeto aqui na empresa com programação estruturada (entidades burras e um monte de gerenciadores)

Então, se minha classe tiver uma propriedade com descrevi nos Foruns:

[code] public class Entidade
{
public StateMachine StateMachine { get; set; }
public int Vida { get; set; }
}

public class Estado1: Estado
{
    private readonly Entidade _entidade;

    public Estado1(Entidade entidade)
    {
        _entidade = entidade;
    }

    public void Logica()
    {
        if (_entidade.Vida > 30)
            _entidade.StateMachine.ChangeState(new Estado2(_entidade));
    }
}[/code]

eu estaria violando a Lei de Demeter, acessando a StateMachine da _entidade e o que diz o Tell Dont Ask http://unplugged.giggio.net/unplugged/post/Tell-dont-ask.aspx

Eu pensei em fazer assim

[code] public class Entidade
{
public StateMachine StateMachine { get; set; }
public int Vida { get; set; }

    public void ChangeState(Estado estado)
    {
        StateMachine.ChangeState(estado);
    }
}

public class Estado1: Estado
{
    private readonly Entidade _entidade;

    public Estado1(Entidade entidade)
    {
        _entidade = entidade;
    }

    public void Logica()
    {
        if (_entidade.Vida > 30)
            _entidade.ChangeState(new Estado2(_entidade));
    }

  
}[/code]

mas imagina que a StateMachine tem muitos outros metodos ficando

[code] public class Entidade
{
public StateMachine StateMachine { get; set; }
public int Vida { get; set; }

    public void ChangeState(Estado estado)
    {
        StateMachine.ChangeState(estado);
    }

    public void BackToPreviousStates()
    {
        StateMachine.BackToPreviousStates();
    }

    public void SetGlobalState(Estado estado)
    {
        StateMachine.SetGlobalState(estado);
    }

    public void SetCurrentState(Estado estado)...
  
}[/code]

E por aí vai, se eu adiciona-se uma outra propriedade na Entidade teria:

[code] public class Entidade
{
public StateMachine StateMachine { get; set; }
public int Vida { get; set; }
public Weapon Weapon { get; set; }

    public void Atack()
    {
        Weapon.Atack();
    }[/code]

ou seja, cada ves que eu criar classes para tirar a responsabilidade das costa de minha entidade eu adicionarei de qualquer forma metodos a mais nela…
Desculpe o Codigo em C#, mas é o que tenho aqui, se não entenderem eu mudo para java…

minhas referencias para esta codigo são
http://sofiaia.wordpress.com/2008/07/11/maquina-de-estados/
http://www.ai-junkie.com/architecture/state_driven/tut_state1.html
http://www.guj.com.br/java/24029-lei-de-demetrio-e-agregacao