优化班级结构

时间:2009-02-16 23:05:30

标签: c# class uml

我的应用程序中有以下类结构(为了时间而缩写,名称已更改)。当我编写代码时,我觉得Action1和Action2之间的相似性应该保证某种泛化。我已经提供了UML类图以及相关部分(接口除外,我在下面的代码中描述了这些接口)。我想知道是否有人知道如何制作这种“更好”的架构/类设计。此外,非常相似的操作可以在近期的迭代中实现。

UML Diagram 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 :(得分:0)

我第一次看到这个想法得出以下结论:

重载接口,因为两者都已经实现了接口。然后,创建一个Action接口,该接口封装Action1的List,List和ActionType属性,使Action2具有空的伪ActionType属性。但是,这看起来非常混乱,而且不太可扩展(因为未来有新的行动计划)

答案 1 :(得分:0)

我不确定这是否能解决你的问题,但现在就去了。

首先,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; }
}

我不确定如果没有更多细节,你还可以做多少......