2009-11-12 2 views
0

그래서 저는 동료 중 한 명과 함께 프레임 워크와 같은 시스템을 만들고 있습니다. 우리의 현재 과제는 상태를 가장 잘 구현하는 방법입니다. 흔히 상태는 고유 한 데이터 (테이블 행의 색상 또는 사용자에게 표시되는 텍스트 등)와 함께 전달됩니다. 현재이 모든 데이터를 포함하는 상태 테이블이 있습니다. 해당 테이블에 포함 된 열은 "css_class"입니다. 레코드가 해당 상태 인 경우 지정된 CSS 클래스가 요소에 연결됩니다 (이 경우 tr). 또한 다른 레코드에 특정 상태를 지정하기 위해 데이터베이스 테이블에 외래 키가 지정됩니다 (이 경우 사용자는 특정 상태를 가지므로 사용자 테이블에는 statuses_id 외래 키가 있음). 이 구현은 올바르게 작동하지만 몇 가지 문제가 있습니다. 첫째, 레코드가 특정 상태에있는 경우 PHP에서 특정 작업을 수행해야하는 경우 무엇입니까? 지금 우리가하는 방식은 다음과 같습니다.MySQL 상태 모델 - 최적의 구현?

if($user->status==0) 
{ 
    //execute some code 
} 

상태가 변경 될 수있는 경우 실제로 작동하지 않습니다. 하나의 상태를 변경하면 관련 코드가 의도 한 것과 다르게 작동하거나 다르게 작동합니다.

다른 문제 및 질문 게시의 주된 원인은 테이블에 "css_class"열이 있다는 것입니다. 이것은 매우 다목적이며 특정 상태의 스타일을 매우 빠르게 변경할 수 있습니다. 그러나 우리는 데이터베이스 내부에 코드를 넣는 아이디어를 정말로 싫어합니다. 아마도 데이터베이스에 CSS 클래스가있는 것은 반드시 나쁜 것은 아니지만 공통된 실천이 무엇인지 모릅니다. 어떤 아이디어?

편집 : 나는 처음 몇 대한 답변에서 수집 한 어떤

은 내가 MVC 프레임 워크를 유지하기 위해 내 모델 물건을 밖으로 내보기 물건을 유지해야한다는 것입니다. 내 주장은 내가 데이터베이스에서 css_class 이름을 지우면 뷰에서 상태 ID를 확인하여 할당 할 클래스를 결정한다는 것입니다. 그래서 클래스를 데이터베이스에 넣으면 뷰 정보를 모델에 넣을 것입니다. CSS 클래스를 데이터베이스에 저장하지 않으면 View에 모델 정보를 넣고 (어떤 ID가 속해 있는지 확인). 그래서 Model을 muddying하지 않고 대신에 뷰를 muddy .......

답변

2

지금까지 해결 된 가장 우아한 방법은 데이터베이스에 관련 데이터 만 저장하는 것입니다. 예 : 당신은 데이터베이스에 status = "red"를 저장하고, CSS의 관점에서 빨간색 상태로 무엇을해야 하는지를 알기 위해 뷰에 남겨 둡니다. 문제는 재사용 가능한 구조를 생성하는 충분히 진보 된 View 레이어를 디자인함으로써 해결됩니다. CSS 변경시 페이지 단위로 항상 업데이트 할 필요가 없습니다.

이제 코드가 데이터베이스에서 프리젠 테이션 정보를 가져 와서 뷰 수준으로 전달해야한다는 것을 알아야하기 때문에 모델에이 정보를 전달하면 콘텐츠/프리젠 테이션 분리가 다소 어려워집니다. shudder, 당신은 정보 흐름에 대한 통제력을 잃어 버렸기 때문에 유지 관리를 악몽으로 만드는 View 계층 코드에서 바로 그 것들을 데이터베이스에서 가져올 것입니다.

+0

이 아이디어에 대해 제가 정말 싫어하는 점은 우리가 (상태 == 0) ... 상태 0이 변경하기로 결정하면 유지하기가 매우 어렵습니다 – SpaDusA

+0

당신이 직면하고있는 상황에 대한보다 구체적인 예를 게시 할 수 있다면 더 많은 응답을 할 수 있습니다. 나는 당신이 문제라고 묘사하고있는 상황을 묘사하는 데 어려움을 겪고있다. 그러나 나는 그것이 통신 문제라고 확신한다. –

+0

그래, 뭐. 나는 함께 모범을 보려고 노력할 것이다. 감사! – SpaDusA

0

DB에 이것을 저장하는 패러다임을 계속하기를 원한다면, VARCHAR의 이름을 매핑하는 다른 테이블을 만들 수 있습니다. 상태를 해당하는 INTEGER ID로 변환합니다.

그러나 이것이 내 프레임 워크 인 경우. 나는 이런 정보를 데이터베이스에 저장하지 않을 것이다. 이것은 내 MVC 설정의 V에서 처리됩니다. 보기의 데이터 모델링 관점에서

+0

이것은 정확하게 피하려고하는 것입니다. 나는 M, v, C를 분리하여 보관하는 것을 선호한다. 현재 내 V를 내 M에 넣고 Rob는 M의 일부를 V에 넣을 것을 권장합니다 (ENUM 값으로 명명 된 클래스가있는 경우 ...) 행복한 매체가 있습니까? – SpaDusA

0

:

  • 상태의 각 "종류"에 대한 다른 테이블을 가지고; 사용자 상태를 페이지 상태와 분리하여 유지 (예 :) - 같은 엔티티를 함께 그룹화합니다.
  • CSS 클래스를 데이터베이스에 넣지 말고 상태 표시기의 일부 형식을 사용하십시오. 가능한 상태를 가장 먼저 알면 ENUM 열이 될 수 있습니다. 이것을 뷰 레이어의 적절한 CSS 클래스로 변환하십시오. 데이터베이스에있는 일부 데이터로 인해 CSS가 변경 될 수없는 상황에 놓치고 싶지는 않습니다.
+0

대부분의 경우, 나는 상태를 미리 알고 ENUM이 나쁜 아이디어는 아닐 것입니다. 그러나 우리는 상태를 관리 할 수있는 능력을 요구하는 무시할 수없는 클라이언트를 보유하고 있습니다.이 경우 ENUM 아이디어가 깨질 수 있습니다 ... – SpaDusA