모범 사례 : 데이터베이스 앱 프로그래밍 패턴


11

지금까지 많은 데이터베이스 (MySQL) 웹 앱을 작성했지만 항상 내 구조가 다소 어색하다고 생각합니다. 여기에 조언을 기대하면서 사용하는 프로그래밍 / 디자인 패턴을 개선하고 싶습니다. 특히 데이터베이스 (스키마) 구현을 캡슐화하는 OOP 접근 방식을 보완하는 구조를 찾을 수 없습니다. 나는

내 질문은 모범으로 가장 잘 설명 될 수 있다고 생각하십시오. 인보이스 객체 / 클래스가 있다고 말하는 두 가지 방법이 있습니다.

먼저 정적 멤버 함수를 사용하는 것입니다

class Invoice
{
   int id;
   string ref;
   int customer_id;
   date created;
   date due;

   static id create();
   static bool update(id, field1, field2, ...);
   static bool delete(id);
   static bool get(id);
};

두 번째 방법은 모든 것을 데이터베이스 객체에 넣는 것입니다.

class Database extends ProprietaryDBConnecter, Singleton
{
   id createInvoice();
   bool updateInvoice(id, field1, field2, ...);
   bool deleteInvoice(id);
   bool getInvoice(id);

   id createCustomer();
   bool updateCustomer(id, field1, field2, ...);
   bool deleteCustomer(id);
   bool getCustomer(id);

   // etc...
}

"보기"는 클래스에 필요한 것을 결정하고 따라서 문서 /보기 아키텍처를 깨뜨리는 것처럼 보이기 때문에 (SQL) 멤버 함수는 "보기"와 분리 할 수없는 두 가지 방법을 발견했습니다.

또한 SELECT 문은 필요한 것만 선택해야하는 것처럼 비효율적 인 것처럼 보이지만 송장에 멤버 변수가 있으면 "보증 된 데이터"를 의미하는 것 같습니다.

질문을 명확하게 설명했는지 모르겠습니다.이 아키텍처 / 디자인 패턴에 대한 다른 최선의 접근 방법은 무엇입니까?

조언 감사합니다

답변:


14

ORM을 사용할 수 있다고 가정합니다.

그러나 실제로 데이터베이스 디자인은 OOP 원칙을 따르지 않아야하며 정규화와 같은 데이터베이스 디자인 원칙을 따라야합니다. 또한 응용 프로그램이 아닌 데이터베이스에서 설계해야합니다. 그리고 데이터 무결성 규칙은 응용 프로그램이 아닌 데이터베이스 수준에서 적용되어야합니다.

데이터베이스 설계 서적을 읽은 다음 선택한 데이터베이스 성능 조정에 대해 읽으십시오.


5
모든 ORP가 아니어야하는 +1 (일부 ORM이 아주 훌륭하더라도!)
Javier

1
O / RM은 훌륭하지만이를 사용한다고해서 데이터베이스 디자인이 적합하지 않다는 의미는 아닙니다.
BlackICE

1
@David, 나는 자신이 무엇을하고 있는지 아는 사람의 손에 달려 있다는 것에 동의합니다. 그리고 그가 ORM을 살펴 보라고 제안했지만 실제로 데이터베이스 디자인을 모른다면 ORM은 위험한 도구입니다.
HLGEM

이는 데이터베이스 수준에서 데이터 무결성 규칙을 시행 할 수 있다는 점입니다. 그러나 규칙이 변경 될 수있는 경우 응용 프로그램에 일부 규칙 (예 : '프로젝트에는 항상 5 명 이상의 팀 구성원이 포함되어야 함')을 적용하는 것이 합리적이며 응용 프로그램 만 데이터를 수정합니다.
Jon Onstott

응용 프로그램이 데이터를 수정하는 유일한 것은 아닙니다. 데이터베이스에 넣지 않은 비즈니스 규칙은 누군가가 일부 데이터 수정을 지원하기 위해 많은 양의 데이터를 빠르게 변경해야 할 때 매우 쉽게 위반되는 경향이 있습니다.
HLGEM

10

데이터베이스 구현을 캡슐화하는 OOP 접근 방식을 보완하는 구조를 찾을 수 없습니다

객체 관계형 임피던스 불일치를 설명하는 것 같습니다 .

이 OODBMS, ORM 툴하는 해결 해야하는 가지가 있습니다 호스트 데이터 액세스 도구는.

솔루션이 너무 많기 때문에 One True Solution ™이 존재하지 않는다고 믿게됩니다.

그래서 당신은 어떤 사람들은 그것을 싫어하고 어떤 사람들은 그것을 좋아할 것이라는 지식으로 당신이 원하는 방향을 고를 수 있습니다.


좀 더 엄격한 방식으로 보입니다.
Jake

2

ORM 랩퍼를 사용하지 않으려면 MongoDB 와 같은 OOP 스타일 스토리지를 지원하는 데이터베이스를 사용하십시오 .

MongoDB를 (에서 "후 몽고 우리")는 크로스 플랫폼이다 문서 지향 데이터베이스 시스템. " NoSQL "데이터베이스 로 분류 된 MongoDB 는 동적 스키마 (MongoDB는 BSON 형식 이라고 함 ) 가있는 JSON 과 유사한 문서를 선호 하여 기존의 테이블 기반 관계형 데이터베이스 구조를 피하여 특정 유형의 애플리케이션에서 데이터를 더 쉽고 빠르게 통합합니다. ..

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.