2009-08-20 11 views
5

Ich habe die folgende Klasse:Frage zum Fluent Interface in C#

public class Fluently 
{ 
    public Fluently Is(string lhs) 
    { 
    return this; 
    } 
    public Fluently Does(string lhs) 
    { 
    return this; 
    } 
    public Fluently EqualTo(string rhs) 
    { 
    return this; 
    } 
    public Fluently LessThan(string rhs) 
    { 
    return this; 
    } 
    public Fluently GreaterThan(string rhs) 
    { 
    return this; 
    } 
} 

In der englischen Grammatik kann man nicht haben „ist etwas gleich etwas“ oder „tut etwas größer ist als etwas,“ so kann ich nicht will, dass Is.EqualTo und Does.GreaterThan möglich sind. Gibt es eine Möglichkeit, es einzuschränken?

var f = new Fluently(); 
f.Is("a").GreaterThan("b"); 
f.Is("a").EqualTo("b");  //grammatically incorrect in English 
f.Does("a").GreaterThan("b"); 
f.Does("a").EqualTo("b");  //grammatically incorrect in English 

Vielen Dank!

+0

Sind Sie sicher, dass "etwas gleich ist" grammatikalisch falsch ist ?? –

+0

Vielleicht nicht, aber Sie bekommen die Idee richtig? – Jeff

+0

Ja, ich habe die Idee, ich denke es ist Kontext. Fragen Sie *, ob es gleich oder * angibt, dass es gleich ist? Würde deine Frage beantworten, wenn ich wüsste, aber um die Wahrheit zu sagen, bin ich mir nicht sicher, also bin ich eine Grammatik nazi :) –

Antwort

9

Um diese Art der Sache durchzusetzen, werden Sie mehrere Typen brauchen (zu beschränken, was aus welchem ​​Kontext verfügbar ist) - oder zumindest ein paar Schnittstellen:

public class Fluently : IFluentlyDoes, IFluentlyIs 
{ 
    public IFluentlyIs Is(string lhs) 
    { 
     return this; 
    } 
    public IFluentlyDoes Does(string lhs) 
    { 
     return this; 
    } 
    Fluently IFluentlyDoes.EqualTo(string rhs) 
    { 
     return this; 
    } 
    Fluently IFluentlyIs.LessThan(string rhs) 
    { 
     return this; 
    } 
    Fluently IFluentlyIs.GreaterThan(string rhs) 
    { 
     return this; 
    } 
} 
public interface IFluentlyIs 
{ 
    Fluently LessThan(string rhs); 
    Fluently GreaterThan(string rhs); 
} 
public interface IFluentlyDoes 
{ // grammar not included - this is just for illustration! 
    Fluently EqualTo(string rhs); 
} 
+0

oh ja ... danke. – Jeff

+0

Wir brauchen jetzt einen Grammatik-Guru! – Jeff

0

würde meine Lösung sein

public class Fluently 
{ 
    public FluentlyIs Is(string lhs) 
    { 
     return this; 
    } 
    public FluentlyDoes Does(string lhs) 
    { 
     return this; 
    } 
} 

public class FluentlyIs 
{ 
    FluentlyIs LessThan(string rhs) 
    { 
     return this; 
    } 
    FluentlyIs GreaterThan(string rhs) 
    { 
     return this; 
    } 
} 

public class FluentlyDoes 
{ 
    FluentlyDoes EqualTo(string rhs) 
    { 
     return this; 
    } 
} 

Ganz ähnlich wie Gravell, aber meiner Meinung nach etwas einfacher zu verstehen.

+0

Ich bevorzuge Gravells Lösung, da ich die einzelne Klasse zur besseren Lesbarkeit in eine Teilklasse aufteilen kann. – Jeff