2011-01-22 3 views
2

저는 Zend Framework를 사용하여 사용자 정의 CMS의 사용자에 대해 ACL (권한 - 권한)을 설정하기위한 웹 인터페이스를 구축하고 있습니다. ACL 데이터는 5 개의 테이블 (사용자, 그룹, 사용 권한, urls = action + controller, 사용자가 이해할 수있는 좋은 사용 권한 이름)에 분산되어 있으며 4 개의 기본 CRUD (생성, 나열, 업데이트, 삭제) operations 나는 그것을 수행하는 가장 좋은 방법이 무엇인지 궁금해하고 있었습니까?여러 테이블에 대해 Zend 모델을 함께 설계 하시겠습니까?

내 책의 모든 예는 입니다. 각 모델은 Zend_Db_Table_Abstract를 확장하여 하나의 테이블을 나타냅니다.

내가 zend_db_table_abstract를 확장하지 않은 모델을 작성한 다음 이 필요한 쿼리를 직접 작성하면은 mysql 데이터베이스로만 제한됩니다.

p.s.

당신에게

답변

3

감사는 ACL의 데이터베이스 구조에 대해 논쟁하지 않는하시기 바랍니다 definition of the Table Data Gateway pattern

데이터베이스 테이블에 게이트웨이 역할을하는 객체입니다. 하나의 인스턴스가 테이블의 모든 행을 처리합니다.

Zend Framework에서 다르게 사용 된 것을 볼 수없는 이유입니다. Data Source Architectural Patterns입니다. 요청하는 것은 도메인 특정 클래스입니다.

발생하는 것은 Impedance Mismatch입니다. 즉, Business Objects는 데이터베이스 디자인의 구조와 일치하지 않습니다. 일반적인 해결책은 DataMapper 또는 ORM을 사용하는 것입니다.

다른 해결책은 필요한 비즈니스 개체에 1 : 1을 매핑하는 방식으로 테이블을 조인하는 데이터베이스에서 뷰를 만드는 것입니다. 그런 다음 해당보기에 Zend_Db_Table을 추가하십시오. 당신은 여전히 ​​사용자 정의 생성, 업데이트, 삭제 로직을 생각해 내야 만합니다. 데이터 매핑이 아니지만 매핑 할 비즈니스/도메인 클래스가없는 경우 괜찮습니다.

+0

그래서 모델의 4 가지 함수 (getAll, deleteById, create, updateById)를 손으로 작성하면 데이터 매핑이 올바를 것인가? – max4ever

+0

@ max4ever 귀하의 모델 정의가 확실하지 않습니다. 모델은 데이터베이스가 아닙니다. 데이터베이스는 지속성 계층입니다. 그것은 모델의 한 부분이지만 모델이 아닙니다. 모델에는 여러 개의 다른 레이어가있을 수 있습니다. – Gordon

+0

미안 해요, MVC 패턴에서 M 모델로, 나는 데이터베이스의보기가 허용되지 않을 것이라고 생각합니다. 그래서 데이터베이스에 뷰를 구축하는 대신에 "select .."를 사용하여 동일한 추상화를 만들 수 있습니다. . from ... "위에서 설명한 4 가지 함수에서 쿼리가 수행 되었습니까? :/ – max4ever

관련 문제