Оптимизация структуры классов - PullRequest
0 голосов
/ 17 февраля 2009

У меня есть следующая структура класса (сокращенная ради времени, имена изменены) в моем приложении. Когда я писал код, я чувствовал, что сходство между Action1 и Action2 должно служить своего рода обобщением. Я предоставил диаграмму классов UML с соответствующими частями (за исключением интерфейсов, которые я опишу в коде ниже). Мне было интересно, есть ли у кого-нибудь идея, как сделать эту «лучшую» архитектуру / дизайн класса. Кроме того, действия, которые очень похожи, могут быть реализованы в ближайшем будущем.

Диаграмма UML http://img16.imageshack.us/img16/2569/mainmm2.jpg

Код для интерфейсов

public IActor1
{
    public Property1 { get; set; }
    public Property2 { get; set; }
}

public IActor2
{
    public Property3 { get; set; }
    public Property2 { get; set; }
}

Ответы [ 2 ]

0 голосов
/ 17 февраля 2009

Я не уверен, что это ответ на ваш вопрос, но здесь идет.

Во-первых, IActor1 и IActor2 должны иметь общий базовый интерфейс с общими свойствами:

public interface IActorBase {
    public Property2 { get; set; }
}

Теперь Действия должны иметь общую базу

public abstract class ActionBase<TActor> where TActor: IActorBase {
    public List<String> StringList { get; set; }
    public List<TActor> ActorList  { get; set; }
}

Затем вы реализуете свои Action1 и Action2 как таковые:

public class Action2 : ActionBase<IActor2> { }

public class Action1 : ActionBase<IActor1> {
    public enum Action1Type Type { get; set; }
}

Я не уверен, что вы могли бы сделать здесь без подробностей ...

0 голосов
/ 17 февраля 2009

Мой первый взгляд на это был следующий:

Перегрузка интерфейса, поскольку оба интерфейса уже реализованы. Затем создал интерфейс Action, который инкапсулирует свойства List, List и ActionType для Action1, оставив Action2 пустое фиктивное свойство ActionType. Тем не менее, это выглядит крайне грязно и не очень расширяемо (поскольку в будущем есть планы для новых действий)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...