타사 유형 Person
이 있습니다. 그것은 단순히 사람이에 가입 메일 링리스트의 목록입니다 Subscriptions
수집을 노출 :비즈니스 로직을 확장 메소드로 변환
public class Person
{
public Person(int id)
public IList<int> Subscriptions {get;set;}
}
(그것은 mutable이다, 거기에는 어떤 검증, 모든 사람이 그것을 청소 할 수 없지만, 그 제 3 자 API입니다) .
구독 비즈니스 로직을 넣고 적절한 장소를 찾고 싶습니다 (구독에는 유효성 검사 규칙이있을 수 있습니다. 일부 조건에 따라 자동으로 추가되거나 제거 될 수 있습니다). 여기 두 가지 옵션을 볼 수 있습니다
옵션 1 :Subscribe
및 Unsubscribe
방법에 캡슐화 모든 비즈니스 로직과 내 솔루션의 새로운 Recipient
유형이 될 수 있습니다 :
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을 배치하기에 적합한 장소처럼 보이지는 않습니다. 그 일에 어떤 단점이 있습니까?
그것은 나의 인식이기도하다. 나는 그것을 설명하는 좋은 원천을 찾지 못했다. SOLID가 이걸 어떻게 준수하는지 조금 설명해 주시겠습니까? –
@SergeyShushlyapin - 내 수정 사항을 확인하십시오. –
테스트 가능성 추가 –