2009-05-22 4 views
2

내 소프트웨어에 데이터 액세스 레이어를 다시 쓰는 것에 중점을 두겠다. 이것은 실제로 사용하는 첫 번째 프로젝트였으며 부적절한 방식으로 이루어졌습니다.내 데이터 액세스 레이어 개선

내 프로젝트에서 가져온 모든 데이터는 arraylist에 저장됩니다. 데이터 중 일부는 arraylist에서 유형이 지정된 객체로 변환 된 후 arraylist로 다시 전송됩니다.

또한 응용 프로그램에는 중앙 쿼리 집합이 없습니다. 이는 일부 쿼리가 복사 및 붙여 넣기된다는 것을 의미합니다.이 응용 프로그램에는 응용 프로그램에 대해 매우 표준적인 일부 사용자 지정 개체와 해당 개체에 대해 매우 표준적인 쿼리가 있습니다.

내 개체와 데이터베이스에 읽고 쓰는 클래스 사이에 레이어를 만들어야하는지 잘 모르겠습니다. 이 계층은 데이터베이스에서 가져온 데이터를 적절한 객체로 입력하고 여러 객체가 반환되는 경우 해당 객체의 목록을 반환합니다. 이것은 좋은 접근 방법입니까?

또한 이것이 좋은 방법 일 경우 데이터베이스에서 데이터를 어떻게 반환해야합니까? 현재 SqlDataReader.read를 사용하고 있으며 배열 목록을 채 웁니다. 이 방법을 사용하는 것이 최선의 방법이 아니라고 확신합니다.이 방법을 개선하는 방법은 아직 명확하지 않습니다.

이 모든 이유는, 내가 몇 가지 클래스로 데이터베이스 작업을 모두 중앙 집중화보다는

답변

4

한 가지는 바로 박쥐 마음에 온다. 대신 제네릭의 ArrayLists를 사용하는 이유가 있다면? 거기 당신은 .NET 1.1을 사용하고 있습니다. 이해할 수 있지만, 성능을 얻을 수있는 영역 중 하나는 그림에서 ArrayList를 제거하고 유형간에 변환 및 캐스팅을 중지하는 것입니다.

데이터 액세스 레이어를 설계 할 때 많은 것들이 ORM입니다. 및 LINQ to SQL이 작업을 잘 수행합니다. 일반적으로 N 계층 접근법은 잘 작동합니다 당신이 성취하려고하는 것처럼 보이는 것을 위해.예를 들어, 재사용 할 수있는 특정 메소드로 클래스 라이브러리에서 데이터 액세스를 수행하는 것은 모든 장소에서 동일한 쿼리를 "복사 - 붙여 넣기"하는 것보다 훨씬 낫습니다.

이 정보가 도움이되기를 바랍니다.

+0

안녕하세요 세계 유형 응용 프로그램보다 큰 것을 작성한 경험이 거의 없기 때문입니다. 나는 심지어 제네릭이 길 아래로 갈 때까지 무엇인지 알지 못했고, 나는 분명히 이점을 깨닫지 못했고 결국에는 쓸 쿼리의 수를 알지 못했습니다. –

+0

좋습니다. 공정하다. 나는 당신이 지금 알고 있다고해서 기뻐요 :). 그 끔찍한 ArrayLists 제거하십시오! –

2

이 정말에 따라 그 프로젝트에서의 모든 클래스 사이에 퍼져해야 할 것입니다 당신이하고있는 일. 사용자 인터페이스 등으로 성장하는 응용 프로그램 인 경우, 맞습니다. 더 나은 방법이 있습니다.

저는 현재 ASP.NET MVC에서 개발 중입니다. Linq가 SQL에 대해 정말 편안하다고 생각합니다. Linq to SQL은 코드 생성을 사용하여 데이터를 모델링하는 코드 클래스 모음을 만듭니다.

ScottGu 자신의 블로그에 LINQ to SQL은에 정말 좋은 소개가 있습니다

http://weblogs.asp.net/scottgu/archive/2007/05/19/using-linq-to-sql-part-1.aspx

+0

링크를 제공해 주셔서 감사합니다. 글을 읽었으며 매우 쉽게 볼 수 있습니다. 성취하고, 훨씬 더 쉽게 작업 할 수 있습니다. –

0

"나는 내 객체와 읽기 및 쓰기 클래스 사이의 계층을 생성하는 경우는 정말 확실하지 이 계층은 데이터베이스에서 가져온 데이터를 적절한 개체로 입력하고 여러 개체가 반환되는 경우 해당 개체의 목록을 반환합니다.이 방법이 좋은 방법입니까? "

저는 Java 개발자이지만 언어에 의존하지 않는 대답은 "예"라고 생각합니다.

마틴 파울러의 "Patterns Of Enterprise Application Architecture "를 보라. 내가 LINQ와 같은 기술이를 위해 태어난 있다고 생각합니다.

5

ORM을 사용해야합니다. "그렇게하지 않는 것은 고객으로부터 도둑질을하는 것입니다."- Ayende

+1

하! 당신이 대답 할 때 그의 포스트를 올려다 봤습니다. http://ayende.com/Blog/archive/2008/11/21/stealing-from-your-client.aspx –

+1

좋은 vonnegut 참조. –

1

지난 몇 프로젝트에서 모든 ADO.NET 작업을 수행하고 다른 모든 데이터 액세스 클래스가 상속하는 기본 클래스를 사용했습니다. 그래서 내 UserDB 클래스는 DataAccessBase 클래스를 상속받습니다. 나는 그 순간에 UserDB 클래스가 실제로 데이터베이스에서 반환 된 데이터를 가져 와서 User 객체를 채운 다음 호출 객체에 반환한다. 여러 객체가 반환되면 일반 목록, 즉 List<Users>이 반환됩니다.

데몬 암스트롱 (이 achived 할 수있는 방법을 보여줍니다 데몬 암스트롱 구글을 검색 할 수 있습니다.

"을"http://www.simple-talk.com/dotnet/.net-framework/.net-application-architecture-the-data-access-layer/ ""지금 시작하지만

이 모든 이동하여 좋은 기사가있다 LINQ to SQL을 사용하려고했으나 물 속에서 죽어 가고있는 것 같아서 곧 내 투자를하는 것이 최선이라고 생각했습니다. 다음 ORM에있는 시간

관련 문제