2011-12-14 3 views
1

저는 C# (winforms)에서 객체 등을 만드는 것을 처음 접했고 이에 대한 최선의 방법을 알아야합니다. 데이터베이스에서 데이터를 반환하는 간단한 개체가 있습니다. 일반적으로 DS 문자열 (인코딩 됨)을 개체에 넣으면 완료되지만 문제는 내가 찾은 것이 개체를 진정한 "모바일"로 만들어 응용 프로그램에서 사용할 수 없게 만듭니다 (웹 또는 창). 따라서 생성자에서 인코딩 된 db 문자열을 필요로하는 객체를 만드는 것이 가장 좋습니다. 어떻게해야할까요?DB 연결이 필요한 객체를 작성하는 방법

public class foo 
{ 
    public foo(string EncodedConnectionString) 
    { 
     _EncodedConnectionString = EncodedConnectionString; 
    } 

    private string _EncodedConnectionString { get; set; } 

    private DataSet GetFooFromDB() 
    { 
     oDatabase = new SQLDataBase(
      EncodedConnectionString, 15); 

     //remaining code omitted... 
    } 
} 

생각, 의견 :

는 여기에 내가 생각 무엇인가?

+0

동일한 데이터베이스에 대한 동일한 연결 문자열이 하나의 컨텍스트에서는 작동하지만 다른 컨텍스트에서는 작동하지 않는 상황을 명확히 할 수 있습니까? – Crisfole

+0

전체 시나리오를 알지 못해서 ...이게 좋아 보이는데,이 객체를 프로젝트로 옮기는 데 어떤 문제가 있습니까? – user1231231412

+0

왜 자체 프레임 워크를 만드시겠습니까? EF, linq2SQL, nHibernate 등과 같이 쉽게 사용할 수있는 많은 프레임 워크가 있습니다. – Maess

답변

2

사실, 개체 자체는 끈기에 관해서는 불가 지론이어야합니다. 제가 의미하는 바는 객체가 저장 /로드되는 방식을 신경 쓰지 않아도된다는 것입니다.

지속성을 달성하는 데는 여러 가지 방법이 있습니다. 한 가지 방법은 개체와 관련된 데이터를로드하고 저장하는 방법을 알고있는 DAL (데이터 액세스 계층)을 사용하는 것입니다. 비록 DAL조차도 연결 문자열을 하드 코딩하지 않고 필요한 경우 설정 파일에서 가져와야 함을 명심하십시오.

간단한 예제는 여기에 있습니다. http://www.radsoftware.com.au/articles/dataaccesslayerdesign1.aspx 개인적으로, 나는 그것이 어떻게 행해졌는지 모든 것에 동의하지 않지만, 그것들을 배우기위한 좋은 출발점입니다. 엔티티 프레임 워크 http://msdn.microsoft.com/en-us/library/bb399572.aspx

또 다른 방법에서 조금 더 고급 읽기보기 위해

는 반전 제어 및 의존성 삽입의 사용하는 것입니다. 아이디어에는 실제 영속성을 수행하는 인터페이스 유형을 허용하는 Save()Load() 메서드가 있습니다. http://msdn.microsoft.com/en-us/library/aa973811.aspx

이것은 좀 더 복잡하지만 필요에 따라 리포지토리를 교환 할 수있는 유연성으로 배당금을 지불합니다. 여러 데이터베이스 백엔드를 지원하거나 심지어 csv/xml 파일에 객체를 저장하는 것이 훨씬 간단하다는 것을 의미합니다.

+0

_ "사실, 개체 자체는 끈기에있어 불가지론 스럽습니다. 개체가 저장 /로드되는 방식을 신경 쓰지 않아도된다는 의미입니다."_ 이것이 내가 나는 최근에 읽은 것을 바탕으로 생각했습니다. 그것은 최선의 접근 방법 인 것 같습니다 .... 링크를 가져 주셔서 감사합니다! – Robert

2

내가 코드에서 변경 whould 것은 :

public class foo 
{ 
    private SQLDataBase _sqlDataBase; 
    public foo(SQLDataBase sqlDataBase) 
    { 
     _sqlDataBase = sqlDataBase; 
    } 
} 

이제 의존성 주입하여 코드를 테스트 할 수 있습니다. 연결 문자열은 외부에서 추가되므로 많은 코드를 다시 작성하거나 다시 작성하지 않고 데이터베이스를 변경할 수 있습니다.

+0

고맙습니다. 유연성을 제공하는 것처럼 보이는이 접근법이 마음에 듭니다. – Robert

관련 문제