프로그래밍 언어로 데이터베이스와 상호 작용할 때 가장 좋아하는 방법은 무엇입니까?[닫은]

StackOverflow https://stackoverflow.com/questions/8087

  •  08-06-2019
  •  | 
  •  

문제

데이터베이스 계층에 연결하고 상호 작용하는 방법에는 여러 가지가 있습니다.예를 들어 Java에서는 일반적인 사용법은 다음과 같습니다. JDBC 원시 SQL 호출, 객체 관계형 매퍼, JDBCTemplate(), 저장 프로시저 등

귀하의 언어에서 귀하가 선호하는 옵션은 무엇이며 그 이유는 무엇입니까?다른 것들은 언제 고려하시겠습니까?

도움이 되었습니까?

해결책

ORM은 매번 데이터베이스에 대해 최소한으로 생각할수록 좋습니다.

다른 팁

저는 3+1 계층 방식의 작업 방식을 정말 좋아합니다.UI용 계층, 비즈니스 논리용 계층, 지속 데이터용 계층입니다.마지막 말은요?도메인 개체 및 인터페이스.이렇게 하면 기본 계층 중 하나 또는 두 개와 도메인 "계층"을 로드할 수 있으며 코드가 작동합니다.

그것은 크게 의존한다 의존성 주입 그리고 통제의 역전 원칙.데이터/지속성 계층은 두 가지 작업만 수행합니다.데이터를 생성, 읽기, 업데이트 및 삭제하고 이를 도메인 개체 형식에 매핑합니다.

UI 계층은 정반대의 작업을 수행합니다.이는 사용자가 연관시킬 수 있는 방식으로 데이터를 표시하고 수신하며 해당 출력/입력을 도메인 개체 형식으로 매핑합니다.

비즈니스 로직 계층에서는 한 가지만 알아야 합니다.비즈니스 논리.데이터의 출처와 데이터 계층이 데이터를 저장하는 위치는 상관하지 않습니다.방금 초과 인출된 계정에 플래그를 지정해야 한다는 것을 알고 있으며 실제로 이를 수행하는 방법은 실제로 해당 작업의 일부가 아닙니다.

도메인 개체 자체에는 논리가 없으며 계층 간에 데이터를 전달하기 위한 컨테이너일 뿐입니다.이는 종속성에 대해 전혀 생각할 필요 없이 도메인 개체와 인터페이스를 로드할 수 있음을 의미합니다.

결국에는 명확하게 구분된 계층이 있는 매우 명확한 코드 기반을 갖게 되었다고 생각합니다.그리고 일부 엄격한 인터페이스와 좋은 기본 클래스를 사용하면 대부분의 코딩은 X가 발생할 때 소프트웨어에 무엇을 해야 하는지 알려주는 것입니다.그것이 어떻게되어야하는지.

</rant>

편집하다:오 예.이는 LINQ와 서브소닉, 및 기타 ORM.

루비 온 레일즈' 액티브레코드 지금까지 본 모든 것으로 바닥을 닦습니다. 링크 어떤 경우에는 더 좋을 수도 있지만 ActiveRecord는 매우 유연합니다.

LINQ는 이제부터 제가 가야 할 길입니다.

나는 비즈니스 개체 모델 계층(개체 및 개체 집합)을 구축하는 것을 선호합니다.

각 개체/컬렉션에 데이터베이스와 상호 작용하는 기능을 구축합니다(SQL Server의 경우 시스템.데이터.Sql클라이언트).나는 SQL Server, MySQL, Oracle에 이 패턴을 사용했습니다.

그런 다음 애플리케이션 코드의 객체와 상호 작용합니다.

내 데이터베이스를 객체로 추상화함으로써 내 애플리케이션 코드는 백엔드 데이터베이스에 관계없이 일관됩니다.

ORM은 정말 환상적입니다.

저는 Python 내에서 작업할 때 SQL Alchemy를 사용합니다. 이는 제가 실행해 본 거의 모든 DBMS에서 작동합니다.

MacOS X의 경량 데이터 기반 애플리케이션의 경우 Xcode를 통해 액세스할 수 있는 훌륭한 데이터 모델링 도구가 있는 Core Data를 사용합니다.

이 두 가지 모두 올바르게 수행된 ORM이 우수하다는 것을 보여줍니다.나는 EJB에 대한 성공과 즐거움이 적었습니다.

저는 아직 LINQ 세계에 입문하지 않았지만 Visual Studio에서 XSD 데이터 세트를 통해 수행한 DataTable/TableAdapter 클래스를 정말 좋아하게 되었습니다.데이터베이스 스키마를 생성한 후 몇 번의 드래그 앤 클릭을 통해 이제 강력한 형식의 DataSet/DataTable 개체가 생겼고 모든 CRUD 문에 대한 저장 프로시저에 대해 매개 변수화된 쿼리를 사용하는 어댑터 메서드가 생겼습니다.테이블에 직접 연결되지 않은 일부 프로시저에 대한 쿼리 테이블 어댑터도 생성됩니다.

아, 아직 저장 프로시저를 만들지 않았고 테이블만 있는 경우 마법사가 프로시저나 임시 SQL 문을 자동으로 생성해 줍니다.

이것은 Visual Studio 2005 이후에 나온 기능으로 새 웹 앱을 사용하여 "구조화"하는 시간을 대폭 단축했으며 비즈니스 및 프레젠테이션 논리에 더 집중할 수 있습니다.

우리는 애플리케이션 내의 특정 상황에 적합한 것이 무엇인지에 따라 혼합된 접근 방식을 사용합니다.

  • 표시할 정보의 가치가 있는 페이지를 읽고 사용자가 업데이트할 때 우리는 Hibernate를 사용합니다.
  • 일괄 업데이트를 처리하거나 대부분의 데이터가 이미 데이터베이스에 있는 위치를 요약하는 경우(예:일과 종료 처리) 우리는 PL/SQL을 사용합니다(그리고 세트로 생각하려고 노력합니다)
  • 사용자가 검색을 수행하거나 요약 보고서를 실행할 때 우리는 ibatis sqlmaps를 사용하여 일부 SQL을 구축하고 관심 있는 필드만 다시 가져옵니다(모든 열은 물론 불필요한 하위 행도 아님, urggh).
  • 빠르게 실행해야 하는 모든 작업에는 가장 적합한 접근 방식을 사용합니다.

이것은 java/Oracle입니다.

액티브레코드, 이는 Fowler's에서 처음으로 문서화된 패턴입니다. 엔터프라이즈 아키텍처의 패턴.Rails의 핵심 기술로 잘 알려져 있지만 Ruby 이외의 다른 언어에서도 구현되었다고 생각합니다.어쨌든 그것은 데이터베이스를 깔끔하게 추상화한 것이지만, 약간 투박하고 find_by_sql 영역에 있다는 것을 고백해야 합니다.하지만 그게 바로 나일 수도 있습니다.

그러나 (지금 심술궂은 노인 모자를 쓰고) 세상의 모든 ORM은 SQL에 대한 좋은 지식을 대체할 수 없습니다. SQL에 대한 지식 없이는 RDBMS에 대한 액세스가 전혀 허용되는 것을 정말로 보고 싶지 않습니다.

우리는 Oracle.OleDBProvider를 통해 Delphi와 ODAC(Oracle Data Access Components) 및 ADO를 사용합니다.

가장 좋아하는 방법은 GemStone 개체 저장소와 함께 Smalltalk를 사용하는 것입니다.왜?처리할 ORM 문제가 없습니다.나는 고용주가 강요하거나 위협하는 경우에만 다른 것을 고려할 것입니다.

제가 가장 좋아하는 방법은 객체 추상화 레이어를 사용하는 것입니다.이상적으로는 다음과 같습니다. 오직 SQL을 다루는 곳.그러나 실제로는 개체가 SQL과 같은 작업도 수행해야 하는 경우가 있습니다.그러나 대상 외부에는 아무것도 없습니다.

지금까지는 사용 가능한 레이어가 너무 어색하거나 너무 느리거나 너무 크기 때문에 이러한 레이어를 직접 작성했습니다.

저는 데이터 기반 애플리케이션을 개발 중이고 데이터베이스 모델이 매우 복잡하기 때문에 일반 JDBC를 사용합니다.모든 것이 데이터베이스에 설명되어 있으며, 심지어 다른 테이블의 구조도 설명됩니다.이 외에도 저장 프로시저를 많이 사용합니다.따라서 ORM은 나에게 선택 사항이 아닙니다.

좋아요 최대 절전 모드 많이 :)

학습 곡선이 있다는 것을 알고 있지만 일단 숙달하고 나면 꽤 좋습니다.

말할 필요도 없이, 나는 새로운 것을 빨리 손에 넣고 싶어 엔터티 프레임워크 .NET 3.5 SP1(이미 사용 가능하다는 것은 알고 있지만 XML을 입력하기에는 약간 게으르다 :))

C#에서 나는 사랑한다 LINQ에서 SQL로 새로운 것을 원하지만 사용하는 것을 정말 좋아합니다. .net계층 + 코드스미스 생성기 .NET 2.0에서 C#을 사용하는 경우 발생하는 데이터베이스에 빠르고 더러운 데이터 계층을 가져옵니다.

우리는 현재 사용하고 있습니다 오닥 Oracle 데이터베이스와 통신하고 많은 Oracle 패키지를 사용합니다(PL/SQL).n 계층 시스템은 RemObjects를 통해 수행됩니다. 즉, 클라이언트에는 SQL이 전혀 없으며 HTTP 요청을 보내는 기능만 필요하므로 설치 오버헤드가 없습니다.

이 모든 작업은 Borland Delphi를 사용하여 수행되었으며 프로덕션 환경에서 2년 동안 작업해 왔습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top