你如何“适应”一个作为集合的类成员
本文关键字:一个 集合 成员 适应 | 更新日期: 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
会有一个适配器似乎是合理的。但是,我真的不知道有任何模式。
假设在执行服务器调用时只需要在 Domain
和 Contract
命名空间之间进行转换,我实际上建议将行为放在构造函数中并让属性自动实现。
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
命名空间模型。我有点担心我可能错过了适配器模式的重点,所以如果我实际上错过了重点,请告诉我。