2009-06-03 6 views
1

У меня есть класс с несколькими свойствами A, B, C. Я рассматриваю это как входной объект, поскольку я использую его в логике для запуска некоторых правил, основанных на значениях этих свойств. Теперь, после запуска правил, я создал другой класс в качестве вывода с теми же свойствами и с теми же значениями в дополнение к нескольким другим свойствам, специфичным для вывода.Доля свойств между несколькими классами

Теперь, мой вопрос заключается в том, как поделиться этими свойствами (A, B, C) между классами ввода и вывода без необходимости назначать значение из ввода на вывод вручную. Можете ли вы предложить мне эффективный дизайн, который мне нужно использовать? Представлена ​​ли концепция абстрактного класса? Или есть другой эффективный способ?

ответ

0

Используйте промежуточный класс, который имеет только свойства и затем получает доступ к экземпляру этого класса из ваших объектов ввода и вывода, однако в большинстве случаев было бы проще скопировать значения из вашего ввода в ваш вывод.

0

Вы считали, что используете шаблон дизайна singleton? Я не знаком со спецификацией вашего проекта, но, похоже, он может помочь вам или, по крайней мере, даст вам направление.

0

Вы можете определить оператор неявного (C#) на выходе класса следующим образом:

public static implicit operator OutputClass(InputClass m) 
{ 
    this.A = m.A; 
    this.B = m.B; 
    this.C = m.C; 
} 

Тогда все, что вы должны сделать, это:

output = input; 

и вы бы эффективно принести по всем данные из ввода, который вы хотите получить.

0

Опции - singleton - работает, но зависит от сценариев повторного использования. Используете ли вы какой-либо тип фабрики или экземпляра, отличный от «нового MyObj()»? если это так, то завод может выполнить работу, что приводит к следующему методу - инъекции. Поддерживает ли ваш язык инъекции или какой-то (ака-весна). Вы можете определить метод setter, но оставьте его до рамки инъекции и/или заводские методы для обработки/настройки - снова зависит от вариантов использования.

Если его время выполнения основано, вам нужно будет использовать состав - делегировать либо ссылку на исходные объекты, либо промежуточный объект (который, в свою очередь, обертывает A, B C и т. Д.).

Вероятно, немного осталось от поля, но я предполагаю, что ваш вопрос - простой случай, чтобы получить некоторые предложения по более крупной проблеме.

Являются ли свойства динамическими - время компиляции и время выполнения? они будут меняться (т. е. обрабатывать динамические обновления из db). Вам нужно запускать тестовую жгуту или с макетными значениями, а затем тестировать в контексте полного приложения?

0

, не зная больше, я думаю, наследование и полиморфизм является путь:

class input 
{ 
    public int A { get; set;} 
    public int B { get; set;} 
    public int C { get; set;} 
} 

class output : input { 
    public int D { get; set;} 
    public int E { get; set;} 
    public int F { get; set;} 
} 

В общем, вы просто делать:

void main() 
{ 
    output tpt = new output(); 
    tpt.A = 3; 
    tpt.B = 2; 
    tpt.C = 4; 

    tpt = dosomething((input)tpt); 
} 

public output dosomething(input inpt) 
{ 
    //blablabla 
    output tpt = (output)inpt; 
    tpt.D = 1; 
    tpt.E = 2; 
    tpt.F = 3; 

    return tpt; 
}