-
Notifications
You must be signed in to change notification settings - Fork 3
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
속성 값을 동반한 개정 모델 인스턴스 생성 #15
Comments
위의 예제대로라면 T : class 전체를 확장하는건가요? 아니면 IModel에 대해서만 확장을 하는건가요?
하지만 이걸 사용할 때에는 매번 3개의 타입을 명시해야 합니다.
그렇다고 모든 class에 대해 확장하자니 다소 시끄러울 것 같군요.
다른 방법이 있을까요? 두 번째 케이스도 |
@gongdo 음... 글쎄요... 일단 프레임워크에서 사용할 용도는 |
@gyuwon 어제 바로 해봤는데 generic-generic 타입 파라미터에 대한 형추론은 지원하지 않더라고요. |
@gongdo 글쿤요... 저도 위 3개 방법 중에서는 2번이 가장 마음에 듭니다. |
확장메서드 예시중 첫번째 용법은 이런 문법도 지원하는건 어떨까요?
확장메서드 예시중 두번째 용법은 fluent스러운 코드를 작성할 때 가장 흔하게 겪는 중복 오퍼레이션의 오버헤드가 걱정됩니다.
이런 연쇄가 필요한 경우 다음과 같은 패턴으로 이 확장메서드가 하려는 행위에 대한 컨텍스트를 유지하는게 좋을 것 같습니다.
문제라면, 예시에서 보여준 것과 같이 깔끔한 단어는 잘 떠오르지 않는 정도일까요? (추가:) AutoMapper에서 힌트를 얻었습니다. 두 번째 용법은 이런식으로도 할 수 있겠군요.
또는 이런식으로 컨텍스트를 재활용할 수도 있겠죠.
|
@gongdo 익명형식을 사용하는 것은 표현에 있어서 유용한 반면 컴파일 타임 오류 검출이 되지 않는 단점이 있겠네요. 컨텍스트별 범위의 리플렉션 캐싱도 장단점이 있을 것 같습니다. 자주 사용되는 형식에 대해서는 단점이겠고 일회성 코드라면 효율적이겠죠. 어쩌면 지금 거론된 기능 중 몇 가지를 함께 지원하는 것도 방법이겠습니다. |
@gyuwon flip 전역에서 리플렉션 캐싱을 공통으로 사용하는 방안은 어떤가요? |
@gongdo 저는 동일한 논리가 동일한 결과를 만들어 캐싱하는 것이라면 굳이 동시성 고려를 하지 않아도 된다고 생각합니다. 즉 그냥, private static int? _three;
public static int Three
{
get
{
if (_three == null)
_three = 1 * 3;
return _three.Value;
}
} 이렇게 하는 것이 |
@gyuwon 넵 동의합니다. 그럼 이 확장메서드의 경우 컨텍스트 연쇄보다는 개별 호출에서 리플렉션 캐시를 이용하는쪽이 더 낫다고 보시는건가요? 최종 pseudo code를 부탁드립니다. |
@gongdo 저는 제가 작성한 원안과 익명 형식을 사용한 방식 두 가지를 지원하면 어떨까합니다. 후자가 전자의 코드를 활용하는 방식이면 적절할 듯 합니다. 어떤가요? |
@gongdo 아, 그리고 익명 형식을 사용한 방식에서
매개변수 |
어라? 그러고보니 저런 식으로는 필요가 없었네요.
하지만 이렇게 하면 위에서 말씀하신것처럼 컴파일타임 오류도 잡을 수 없고 사이드이펙트만 늘어날 것 같습니다. 지원하지 않는 편이 더 낫다고 봅니다. 최초에 제안하신 용법 1.은 문제가 없고, 용법 2.는 불가능하진 않지만 결과적으로 용법 2와 같이 '연쇄'를 하려면 결국 컨텍스트 방식이 필요하겠습니다. |
@gongdo 그렇다면 이 이슈에서는 |
네 그게 좋을 것 같습니다. 실제로 써보고 더 편한게 있으면 좋겠다라던가 더 구체적인 기능이 필요하면 추가하죠. 마지막으로 지금까지 논의된 것중에서 유의미한 형태만 정리했습니다.
이 중 1번만 우선 구현하는 걸로 하겠습니다. 제가 하죠. :) (+노트) 용법1은 전역 리플렉션 캐싱을 추가하는 것이 좋겠습니다. |
Okay. |
모델의 특정 속성 혹은 속성들의 값을 변경한 개정 인스턴스를 생성하는 작업을 도와주는 확장 메서드 집합을 제공합니다. 아래 코드를 참고하세요.
The text was updated successfully, but these errors were encountered: