-1

我有两个接口,它们都具有相同的确切属性。

以防你想知道为什么我有两个这样的界面,这是一个很长的故事,但是是的,它必须是这样的。

如果条件是返回列表的另一种方式,则基于条件返回列表。

通过查看我的接口和下面的代码,我需要能够使用一个对象,换句话说,如果返回哪个接口无关紧要,我需要能够使用一个对象而不是循环一个 List 接口和设置对方的属性。

我需要这样的东西

compParts = genCompParts;

--- 代码使用

    public class ComponentParts : IComponentParts
    {
        public ComponentParts() { }
        public ComponentParts(Guid userID, int compID, bool isGeneric)
        {
            List<IComponentPart> compParts = null;
            List<IComponentPart_Max> genCompParts = null;

            if (isGeneric)
            {
                genCompParts = GenericCatalogBL.GenericCatalogManagerBL.GetComponentPartsMax(compID);
            }
            else
            {
                compParts = CatalogManagerDL.GetComponentParts(userID, compID);
            }

            var verParts = compParts.Where(x => x.CompTypeName.ToLower().Contains("vertical"));
            if (verParts.Count() > 0) { this.Vertical = verParts.ToList<IComponentPart>(); }

            var horParts = compParts.Where(x => x.CompTypeName.ToLower().Contains("horizontal"));
            if (horParts.Count() > 0) { this.Horizontal = horParts.ToList<IComponentPart>(); }

//... redundant code omitted

---界面快照---

界面快照


我最终创建了一个类库调用接口,我只是在我的解决方案中的不同程序之间共享这些接口。

这是我首先应该做的,只是懒惰。

4

1 回答 1

0

完全蛮力的方式,假设您不拥有IComponentPartIComponentPart_Max无法修复其中之一。

制作一个您可以控制的新界面

interface IComponentPart {
    string BrandGroup {get; set;}
    int BrandID {get; set;}
    // ...
}

为两个现有接口制作包装器,使其适应您的接口

class IComponentPartWrapper : IComponentPart  {
    private readonly CatelogDL.IComponentPart _underlyingPart;

    public IComponentPartWrapper(CatelogDL.IComponentPart underlyingPart) {
        _underlyingPart = underlyingPart
    }

    public string BrandGroup {
        get {return _underlyingPart.BrandGroup;}
        set {_underlyingPart.BrandGroup = value;}
    }

    public int BrandID {
        get {return _underlyingPart.BrandID ;}
        set {_underlyingPart.BrandID = value;}
    }

    // ...
}

class IComponentPart_MaxWrapper : IComponentPart  {
    private readonly GenericCatalogDL.IComponentPart_Max _underlyingPart;

    public IComponentPartWrapper(GenericCatalogDL.IComponentPart_Max underlyingPart) {
        _underlyingPart = underlyingPart
    }

    public string BrandGroup {
        get {return _underlyingPart.BrandGroup;}
        set {_underlyingPart.BrandGroup = value;}
    }

    public int BrandID {
        get {return _underlyingPart.BrandID ;}
        set {_underlyingPart.BrandID = value;}
    }

    // ...
}

让您的代码使用您的接口,并将任一库中的结果包装在相应的包装器中

public class ComponentParts : IComponentParts
{
    public ComponentParts() { }
    public ComponentParts(Guid userID, int compID, bool isGeneric)
    {
        List<IComponentPart> compParts;

        if (isGeneric)
        {
            compParts = GenericCatalogBL.GenericCatalogManagerBL.GetComponentPartsMax(compID)
                .Select(x => new IComponentPart_MaxWrapper(x))
                .ToList();
        }
        else
        {
            compParts = CatalogManagerDL.GetComponentParts(userID, compID)
                .Select(x => new IComponentPartWrapper(x))
                .ToList();
        }

        // ...
于 2013-10-25T23:02:29.653 回答