2011-03-28 2 views
2

저는 현재 큰 프로젝트 폴더 내의 UserControl 인 차트 컨트롤을 만들고 있습니다.하지만 여러 프로젝트의 컨트롤로 사용하기 위해이 컨트롤을 꺼내는 것이 가능한지 궁금합니다. 나는 그 프로젝트에 컨트롤을 포함하는 프로젝트를 넣어야한다고 생각한다. (전에는 일반적인 사용자 컨트롤을 만들지 못했지만 프로젝트 내에서만 사용 했었습니다.)UserControl은 비즈니스 로직 클래스에 의존합니다

이 경우 문제는 차트 컨트롤이 더 큰 프로젝트의 비즈니스 로직에 속하는 사용자 정의 클래스 TimeSeries에 의존한다는 것입니다 . 해당 클래스 내의 업데이트는 사용자가 수신하는 이벤트를 시작하여 차트를 업데이트합니다. 이 TimeSeries 클래스는 컨트롤을 사용하는 다른 프로젝트에도 존재하지만 분명히 "같은"클래스는 아닙니다.

그래서이 사용자 정의 컨트롤을 그대로 분리 할 수는 없습니다. 하지만 이것이 의미하는 바는 여기에 나쁜 구조적 관습이 있습니까? 이 일을 계속하기 위해 어떻게 제안 하시겠습니까?

답변

1

자신의 프로젝트에 해당 UserControl을 놓을 때 또한 인터페이스를 만들 :

class TimeSeries : ITimeSeries 
{ 
    // Implement the methods on the interface 
} 

그런 다음 당신의 UserControl이 ITimeSeries해야 하나 : 자신의 시계열이 당신의 주요 프로젝트에 다음

interface ITimeSeries 
{ 
    // Stuff that the UserControl calls on the TimeSeries 
} 

을 그것의 생성자에 있거나 그것을 사용하는 프로젝트에 의해 설정 될 수있는 ITimeSeries 타입의 공용 필드/속성을 가지고 있습니다. 그렇게하면 TimeSeries를 사용해야 할 때 사용중인 구현에 상관이 없습니다.

+0

매우 합리적인 것 같습니다. 많은 인터페이스를 사용하는 데 익숙하지 않아서 그것에 대해 생각하지 않았습니다. 그래서 ITimeSeries (및 기타 관련 인터페이스)를 포함하는 프로젝트 하나, ChartControl 만 포함하는 프로젝트 하나를 가질 수 있습니다. 그런 다음 다른 프로젝트가이 두 가지를 DLL로 참조 할 수 있습니까? – bretddog

+0

네, 그렇게 할 수 있습니다. 또는 작게 시작하고 프로젝트간에 공유되는 모든 것을 포함하는 단일 프로젝트 (ChartControl 및 ITimeSeries)가있는 경우 참조 용 외부 DLL이 1 개만 있습니다. – thelsdj

관련 문제