【发布时间】:2017-03-22 11:33:13
【问题描述】:
有一个第三方类型Person。它只是公开了Subscriptions 集合,这是一个人订阅的邮件列表:
public class Person
{
public Person(int id)
public IList<int> Subscriptions {get;set;}
}
(是mutable,没有任何验证,大家可以清理,但那是第三方API)。
我需要放置某种订阅业务逻辑并寻找合适的位置来执行此操作(订阅可能有一些验证规则,它们可能会根据某些条件自动添加或删除等)。我可以在这里看到两个选项:
选项 1:
这可能是我的解决方案中的一个新的Recipient 类型,所有业务逻辑都封装在Subscribe 和Unsubscribe 方法中:
public class Recipient
{
public Recipient(Person person) { ... }
public void SubscribeTo(int mailingListId) { ... }
public void UnsubscribeFrom(int mailingListId) { ... }
}
选项 2:
一样的东西,但是变成了PersonExtensions类:
public static class PersonExtensions
{
public static void SubscribeTo(this Person person, int mailingListId) { ... }
public static void UnsubscribeFrom(this Person person, int mailingListId) { ... }
}
静态扩展方法可能会阻止我创建大量 Recepient 实例,但看起来不适合放置 BL。这样做有什么缺点吗?
【问题讨论】:
标签: c# domain-driven-design extension-methods