你如何“适应”一个作为集合的类成员

本文关键字:一个 集合 成员 适应 | 更新日期: 2023-09-27 18:36:20

所以我正在尝试创建一个适配器,其中适配器继承自它尝试模拟的类。构造函数采用将要调整的类的实例,然后映射属性,以便两者相互传递信息,我认为这是非常标准的。但是,其中一个成员恰好是另一种类型的列表,也必须进行调整。这有模式吗??

下面是一个示例:

public class Contract.ClassA
{
    public List<Contract.ListMemberClass> Members { get; set; }
}
public class Domain.ClassA
{
    public List<Domain.ListMemberClass> Members { get; set; }
}
public class Contract.ListMemberClass
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}
public class Domain.ListMemberClass
{
    public string FName { get; set; }
    public string LName { get; set; }
}
// adapters
public class DomainClassAdapter : Domain.ClassA
{
    private readonly Contract.ClassA _input;
    public DomainClassAdapter(Contract.ClassA input)
    {
        _input = input;
    }
    public List<Domain.ListMemberClass> Members {
    {
        get
        {
            // ???
        }
        set
        {
            // ???
        }
    }
}

因此,我对getter的第一直觉是为该列表成员创建另一个适配器,将其更新并返回。然后为二传手做同样的事情,朝另一个方向走。所以我最终可能会得到无数亿个适配器。

这是执行此操作的唯一方法,还是有其他模式,技巧,技术等来解决这种情况?

你如何“适应”一个作为集合的类成员

在我看来

Domain.ListMemberClass会有一个适配器似乎是合理的。但是,我真的不知道有任何模式。

假设在执行服务器调用时只需要在 DomainContract 命名空间之间进行转换,我实际上建议将行为放在构造函数中并让属性自动实现。

public DomainClassAdapter(Contract.ClassA input)
{
  _input = input;
  this.Members = _input.Members.Select(x => new DomainListMemberAdapter(x));
}

如果不想从适配器创建一堆混乱,则在 LINQ 语句中创建Domain.ListMemberClass实例(而不是适配器实例)非常简单(尤其是只有两个属性)。

如果不希望构造函数调用开销很大,则可以对该属性执行缓存方法:

private List<Domain.ListMemberClass> _members;
public List<Domain.ListMemberClass> Members {
{
  get
  {
    if(_members == null)
    {
      // Populate _members from _input
    }
    return _members;
  }
  set
  {
    // No special behavior necessary, I think
  }
}

这两个示例都假设您将调用某个方法,该方法在必要时将所有内容转换为Contract命名空间模型。我有点担心我可能错过了适配器模式的重点,所以如果我实际上错过了重点,请告诉我。