1

나는 기존의 코드를 검토하고, 그리고 "빈"클래스가 주입해야 :의존성 주입 - 나는 "유틸리티 클래스"

[Serializable] 
public class MyData { 
string S {get;set;} 
int I {get;set;} 
//bla bla bla 
private IStringConverter sc; 
public MyData(IStringConverter sc){this.sc=sc} 
} 

나는 무엇이든, 유틸리티 클래스/핸들러 또는 주입하는 완전히 잘못된 생각을 Model 클래스에서 두 가지 이유 : 1)이 직렬화 방지 2) 이유는 무엇입니까? 모델 클래스에는 비헤이비어가 있어서는 안됩니다.

동의합니까? DTO로 서비스를 주입

+0

는'MyData' 단순히 DTO (데이터 전송 객체)인가? –

+0

예, XML로 저장 될 예정이며 세션에 저장됩니다. –

+1

비헤이비어 모델이 모델이 아닌 것으로 가정합니다 – nilphilus

답변

3

대신 DTO 인스턴스에서 작동하며 종속성이 삽입 된 새 서비스를 만들 수 있습니다. 그렇게하면 DTO에서 문제를 해결하고 모든 것이 다시 깨끗 해집니다. 좋은 건축 적합.

2

(내가? 이런 식으로 작성된 클래스를 변경해야하는) 아마 좋은 생각 :) 아니다

내가 매개 변수로 서비스를 취하는 확장 방법을 사용 고려할 것입니다.

이렇게하면 '동작'이 DTO와 분리되어 직렬화가 문제되지 않습니다.

0

확장 방법이있을 수 있지만, 이것은 결코 당신의 논리를 컴파일 타임 싱글 톤으로 만드는 것과 같습니다. 결코 바뀌지 않는 한 괜찮습니다. 다음 문자 그대로 모든 것이 계약을 기반으로

그래서, 이런 식으로 뭔가를 시도 할 것이며, 주

public class Poco 
{ 
    public int Foo; 
    public int Bar; 
} 

public class PocoUtility : IPocoUtility 
{ 
    private IService _service; 
    public PocoUtility(IService service) 
    { 
     _service = service; 
    } 

    public Result DoSomethingWithPoco(Poco poco) 
    { 
     return _service.Convert(poco); 
    } 
} 

public class SomethingThatUsesAPoco 
{ 
    private IPocoUtility _logicForSomething; 

    public SomethingThatUsesAPoco(IPocoFactory pocoFactory, IPocoUtility logicForSomething) 
    { 
     _poco = pocoFactory.CreateInstance(); 
    } 

    public Result DoIt() 
    { 
     return _logicForSomething.DoSomethingWithPoco(_poco); 
    } 
}