Fluentes Interfaces - o número de objetos que está sendo criado
-
12-09-2019 - |
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
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);
}
}