2012-12-17 3 views
0

1) 방법) 오른쪽 (또는 더 나은 파라미터클래스에서 DB 연결을 만드는 더 좋은 방법은 무엇입니까?

//controller 
using(Connection conn = new Connection()){ 
conn.Open(); 
MyClass myclass = new MyClass(); 
} 


//MyClass in Model 
class MyClass { 

    public updateTableA(Connection conn){ 
     //using conn; 
    } 
    public updateTableB(Connection conn){ 
     //using conn; 
    } 
    public updateTableC(Connection conn){ 
     //using conn; 
    } 
} 

각 방법에 대한 연결을 통과 클래스

//controller 
using(Connection conn = new Connection()){ 
conn.Open(); 
MyClass myclass = new MyClass(); 
myclass.setDbConnection(conn); 
} 

//MyClass in Model 
class MyClass { 
    Connection conn; 

    public setDbConnection(conn){ 
     this.conn = conn; 
    } 

    public updateTableA(){ 
     //using this.conn; 
    } 
    public updateTableB(){ 
     //using this.conn; 
    } 
    public updateTableC(){ 
     //using this.conn; 
    } 

} 

2)의 방법을 이용하여 연결을 설정? 그리고 왜?

+2

응답 : Entity Framework를 사용하십시오. – SLaks

+0

SLaks에 동의합니다 ... EF를 사용하면 MVC에서 가장 좋은 방법입니다. – Oluwafemi

답변

2

귀하의 두 가지 옵션을 감안할 때 저는 확실히 첫 번째 옵션과 함께 할 것입니다 - 모든 메소드에 연결을 전달할 때 절대적으로 추가 값이 없습니다 (항상 동일한 연결을 사용한다고 가정). 이렇게하면 코드에 실제 비즈니스 로직을 왜곡시키는 많은 노이즈가 추가됩니다.

추가로 생성자에 연결을 전달하고 setDbConnection 메서드를 사용하지 않는 것이 좋습니다. 이렇게하면 생성자를 호출 한 후에 작업 객체를 확보 할 수 있으며이 메소드를 호출 할 때까지는 실패 할 것이 아닙니다. 그러나 이것이 항상 가능한 것은 아니므로 그러한 초기화 방법은 때로는 불가피합니다.

마지막으로 IDisposable을 구현하는 것에 대해 생각해보아야합니다. 클래스에 일회용 리소스 (연결)가 포함되어 있으므로 수명이 다해서 릴리스해야 할 수도 있습니다.

다른 사용자가 이미 말한 내용을 분명히 지원합니다. Entity Framework와 같은 OR 매퍼를 사용하면 데이터 액세스 계층을 롤링하는 것이 쉽지 않으므로 생각해보십시오.

3

대답은 실제로 패턴이 본질적으로 결함이 있기 때문에 좋은 접근법이 아니라는 것입니다. 데이터 객체는 데이터베이스 연결 유지에 대한 책임을지지 않아야하거나 데이터베이스 디자인과 긴밀하게 결합되어 있어야합니다. 객체 관계형 관리자는 대부분의 데이터베이스 응용 프로그램에서 훨씬 더 나은 접근 방법임을 입증했습니다. Entity Framework 나 nHibernate와 같이 인기있는 것들 중 하나를 조사해야합니다. 개인적으로 nHibernate를 사용합니다.

+1

+1. 이것은 검은 구운 스테이크를 제공하거나 스파게티를 태우는 것이 더 나은지 물어 보는 것과 같습니다 - 요리의 기본 사항을 더 잘 이해하는 것이 좋습니다. 포스터에 대한 접근은 너무나 결함이있어서 재미가 없습니다. – TomTom

+0

@Spencer Ruport 죄송하지만 잘 이해할 수는 없지만 # 2 방법은 데이터베이스 연결을 유지 관리하지 않는 것으로 생각하지 않습니다. 나는 ORM을 사용하는 것이 더 낫다는 것을 이해합니다. 그러나 ORM을 사용하지 않고, 여러분이 언급 한 올바른 패턴을 알고 싶습니다. 좀 더 좀 도와 주실 래요? –

관련 문제