【发布时间】:2013-10-20 14:54:28
【问题描述】:
我发现自己越来越频繁地使用以下设计,我的直觉认为这是一种代理,因为我并没有真正添加太多功能。我怀疑它的唯一原因是因为代码往往更像我看到的装饰器示例!
你怎么看?
class Person
{
public string Name { get; set; }
public int Age { get; set; }
public virtual string Address { get; set; }
}
class PersonProxyOrDecarator : Person
{
private Lazy<string> _address;
public PersonProxyOrDecarator(PersonRepository repository)
{
_address = new Lazy<string>(()=> repository.LoadAddress(this));
}
public override string Address
{
get
{
return _address.Value;
}
set { throw new NotImplementedException(); }
}
}
class PersonRepository
{
public IEnumerable<Person> LoadPeople()
{
return new List<Person>(){
new PersonProxyOrDecarator(this){ Name="Test",Age=18 }
};
}
public string LoadAddress(Person person)
{
return "Address loaded from webservice";
}
}
这无关紧要,但 person 实体类通常位于不同的程序集(域程序集)中,而 personproxyordecorator 类和存储库将位于程序集存储库中。
谢谢
罗斯
【问题讨论】:
-
对我来说,它是一个代理。作为装饰者,我希望它能够为
LoadAddress方法添加和/或更改功能,而您的实现只会延迟实际检索地址,这是典型的代理属性。
标签: design-patterns