Pergunta

Eu estou no processo de criação de algumas interfaces fluentes para algumas coisas validação simples que eu estou brincando com. Uma coisa que tenho notado é que eu tenho um monte de diferentes objetos que está sendo criado.

Por exemplo, dada a seguir declarações:

Check.Assertion.ForValue.That(value, "value").IsNotNull() : void

Check.Assertion.ForArgument.That(value, "value").IsNotNull() : void

Validate.Assertion.ForDate.That("Test").IsNotNull() : bool

Validate.Assertion.ForNumeric.That("Test").IsNotNull() : bool

para cada '' (Aceite para o último) Estou Newing um objeto. Se eu não estava usando uma interface fluente aqui eu teria métodos estáticos apenas utilizados.

O que eu estou querendo saber é se alguém sabe onde se poderia notar qualquer diferença real no desempenho quando se usa este número de instâncias de objetos (note que eles são muito pequenos objetos) como appose a trabalhar com métodos estáticos.

Felicidades Anthony

Foi útil?

Solução

Note que você não precisa necessariamente de construir novos objetos em todo o lugar. Você pode apenas resolver a maior parte da interface fluente através de interfaces, e apenas implementar muitas interfaces de em um objeto. Nesse caso, você poderia simplesmente voltar this, apenas através de uma nova interface.

Exemplo:

public interface ICheckAssertionForValue
{
    ICheckAssertionForValueThat That(Object value, String name);
}

public interface ICheckAssertion
{
    ICheckAssertionForValue ForValue { get; }
}

public class Check : ICheckAssertion
{
    public static ICheckAssertion Assertion
    {
        get { return new Check(); }
    }

    ICheckAssertionForValue ICheckAssertion.ForValue
    {
        get { return this; } // <-- no new object here
    }

    ICheckAssertionForValueThat ICheckAssertionForValue.That(Object value, String name)
    {
        return new SomeOtherObject(value, name);
    }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top