2009-04-16 6 views
1

여기 내 상황이 있습니다. 필자는 코드를 사용하는 모든 함수에 쿼리를 포함시킬 때 코드를 유지하기가 더 어려워진다는 것을 알았습니다. 일부 쿼리는 매우 빠르게 성장하는 경향이 있으며 모든 행을 연결 한 후에는 가독성을 잃는 경향이 있습니다. 모든 연결과 함께 발생하는 또 다른 문제는 특정 쿼리를 테스트하여 붙여 넣어야하는 경우입니다. "쿼리 문자열을 모두 포함하는 모든 항목을 제거해야합니다.어디에서 코드에 사용 된 길고/완전한 쿼리를 저장합니까?

내 질문은 코드에서 쿼리를 분리하는 데 사용되는 메서드는 무엇입니까? 검색을 시도했지만 모양이 보이지 않습니다. 옳은 일을 내가 아무것도 관련을 찾는 아니에요 때문이다.

나는 내 쿼리 프로덕션 데이터베이스에서 데이터를 가져 오기 때문에 뷰와 저장 프로 시저가 불가능 참고하고 싶습니다.

감사합니다.

답변

3

테이블에 저장된 엔터티를 나타내는 클래스에서 쿼리를 래핑하여이 문제를 방지합니다. 따라서 계정 테이블에 Account 개체가 있습니다. 삽입/업데이트/삭제 쿼리가 있습니다.

쿼리가 파일에 저장되는 곳을 보았고 템플릿을 사용하여 쿼리의 일부를 대체했습니다.

Java에는 SQLJ라는 것이 있습니다.

LINQ가이 문제를 해결할 수있는 방법이 될 수도 있습니다.

+0

SQLJ는 DB2 및 Oracle과 같은 일부 데이터베이스 관리자에 있습니다. SQL 코드를 가져 와서 데이터베이스에서 사전 컴파일하므로 데이터 액세스 계획을 작성하기 위해 컴파일 할 때 데이터베이스에 액세스해야합니다. – AngocA

3

질문에 답하지 않은 것으로 고소당하는 위험이 있으므로 내 제안은 간단하지 않습니다. 원하는 O/RM을 사용하면이 문제가 곧 사라질 수 있습니다.

4

MVC pattern을 따르면 모델에 검색어가 모두 포함되어야합니다. 즉 실제 데이터를 나타내는 개체 여야합니다.

그렇다면 각 요청에 필요한 것만 포함하여 모든 반복적 인 쿼리를 스크립트 파일에 넣을 수 있습니다.

그러나 연결하고 그런 종류의 물건을 제거하기가 어렵습니다; 나는 보통 데이터베이스에 표시되는 개체에 대한 데이터 요구 사항을 나타내는 데이터 클래스를 만드는 절차

4

존재 이유입니다. 따라서 고객 클래스가있는 경우 CustomerData 클래스도 생성합니다.이 클래스에는 모든 데이터 액세스 논리가 포함되어 있습니다. 이렇게하면 데이터 로직이 엔티티 클래스에서 제외됩니다. 여기에 모든 CRUD 메소드와 커스텀 데이터 메소드를 추가 할 것입니다.

Youc 또한 언어에 따라 Stored Proceedures 또는 ORM 도구를 사용하십시오.

주요 키는 비즈니스 및 엔티티 논리에서 데이터 논리를 멀리하는 것입니다.

+0

-1, 포함 된 것보다 훨씬 나쁨. –

+1

@ NeilN- SP가 어떻게 끼어 드는 것보다 더 나쁠 수 있는지 자세히 설명해 주시겠습니까? – CmdrTallen

+0

+1, 내장 된 문자열 concat보다 더 좋은 방법입니다! –

2

저장 : 프로그래머는이 두 단어는 당신의 가장 친한 친구가 될 것입니다 :)

0

프로덕션 환경에서 저장 프로 시저를 사용하며 행도 처리합니다 ...

관련 문제