如何构建这种项目?

时间:2012-09-07 01:58:10

标签: c# design-patterns user-interface

说我有两节课:

 ClassA{
    //properties 
    public string NAME{set;get;}
    public string ID{set;get;}
    public int AGE{set;get;}
    //Methods
    public void DoSomething();
    public void MethodA();
    private void MethodB(string name);
    private void MethodC(string name);
    public void MethodD(string name,string id);
    public string getSomething(int age);
    }

    ClassB{
    public void Hello(int input);
    public void HelloWorld(string input);
    }

1)对于ClassA(可能有很多派生类),创建设计界面(GUI)的最佳方法是什么,以便我可以指定其属性值

2)对于ClassA,有没有办法创建一个设计接口(GUI),以便我可以指定调用哪个方法并指定所调用方法的序列/输入/输出?

    public void DoSomethingWithClassA(ClassA ca ){
    ca.MethodA();
  //  ca.MethodB(ca.NAME);
  //  ca.MethodB(ca.ID);
    ca.MethodD(ca.NAME,getSomthing(ca.AGE));

    }

3)如果我有一个名为newClassA的ClassA实例,那么名为newClassB的ClassB实例有一种创建设计接口(GUI)的方法,这样我就可以指定newClassB可以调用newClassA的方法:

ClassA newClassA...
ClassB newClassB...

newClassB.HelloWorld(newClassA.getSomething(newClassA.AGE));

基本上我需要的是拥有一个设计界面(GUI),以便用户可以“直观地设计”他的类,并可以指定方法的关系/输入/输出。我觉得它就像滤镜图。

如果有人能够找到解决方案/框架/设计模式/关键字,那将非常感激。

(我应该强调,设计界面对用户来说意味着GUI,对不起。)

1 个答案:

答案 0 :(得分:4)

我认为你正在寻找像流畅的界面。

看看这篇文章,它应该可以帮助您实现这个目标:http://blog.raffaeu.com/archive/2010/06/26/how-to-write-fluent-interface-with-c-and-lambda.aspx

以下是一个关于如何使用它的简单示例:

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }

    internal Person { }
}

public class PersonFactory
{
    public NameSetter CreatePerson()
    {
        return new NameSetter(new Person());
    }
}

public class NameSetter
{
    private Person person;

    internal NameSetter(Person person)
    {
        this.person = person;
    }

    public AgeSetter SetName(string name)
    {
        this.person.Name = name;
        return new AgeSetter(this.person);
    }
}

public class AgeSetter
{
    private Person person;

    internal AgeSetter(Person person)
    {
        this.person = person;
    }

    public Person SetAge(int age)
    {
        this.person.Age = age;
        return this.person;
    }
}

public class Program
{
    public void Main()
    {
        Person p = new PersonFactory()
                       .CreatePerson()
                       .SetName("Bob")
                       .SetAge(30);
    }
}

我更新了示例,使Person内部的构造函数成为可能。这不是强制性的,但如果您这样做,它将强制您的代码的任何用户使用流畅的界面来创建Person的实例。