2010-05-24 5 views
3

웹 응용 프로그램을 작성하고 있습니다 (파이썬에서는 중요하지 않습니다). 기능 중 하나는 사람들이 사물에 대한 의견을 남길 수 있다는 것입니다. user가 다른 클래스의 인스턴스코드 또는 템플릿에서 정의되지 않은 값을 처리합니까?

class Comment: 
    user = ... 
    # other stuff 

class User: 
    name = ... 
    # other stuff 

그리고 내 템플릿 물론

, 내가

<div>${comment.user.name}</div> 

이 : 나는 기본적과 같이, 코멘트를위한 클래스가 문제 : 사람들이 익명으로 의견을 게시 할 수 있도록 허용한다고 가정 해 봅시다. 이 경우 comment.userNone (정의되지 않음)이며 물론 comment.user.name에 액세스하면 오류가 발생합니다. 그 문제를 해결하는 가장 좋은 방법은 무엇입니까? 다음과 같은 세 가지 가능성이 있습니다.

  • 템플릿의 조건부를 사용하여이 케이스를 테스트하고 다른 것을 표시합니다. 이것은 익명의 주석이 "Posted an ..."대신에 "Posted anonymous"라고 표시되는 방식을 바꿀 수 있기 때문에 가장 다재다능한 해결책입니다. 그러나 나는 종종 템플릿이 어리석은 디스플레이가되어야한다고 들었습니다. 그런 논리는 포함하지 않습니다. 또한 다른 사람들은 동일한 응용 프로그램에 대한 대체 템플리트 작성을 중단 할 수도 있습니다. 템플리트 작성자가 가능한 한 쉽게 작성해야하는 것처럼 느껴집니다.
  • 실제 사용자가 정의되지 않은 경우 더미 사용자 객체를 반환하는 Commentuser 속성에 대한 접근 자 메서드를 구현합니다. 이 더미 객체는 user.name = 'Anonymous' 또는 그와 비슷한 것을 가지므로 템플릿이이 객체에 액세스하여 오류없이 이름을 인쇄 할 수 있습니다.
  • user.name = Anonymous (또는 그와 비슷한) 사용자에 해당하는 내 데이터베이스에 실제 레코드를 넣고 아무도 로그인하지 않은 경우 게시 된 모든 의견에 해당 사용자를 할당하십시오. 실제로 작동하는 실제 시스템을 보았습니다. 이 방법. (phpBB를?)

시스템의 이러한 종류의 쓰기 사람들 사이에서 통용 지혜가 거기에이 (또는 다른 솔루션) 어떤 약이 최고? 어떤 방향으로 가면 조심해야 할 함정이 있습니까? 가장 잘 설명하는 사람은 체크 표시를합니다.

답변

1

템플릿의 if 스위치를 사용하면 첫 번째 옵션을 사용할 수 있습니다.

현지화의 경우를 고려하십시오. 각 언어마다 다른 템플릿이있을 수 있습니다. 템플릿 자체에서 "익명"사례를 쉽게 현지화 할 수 있습니다.

또한 데이터 모델은 출력면과 관련이 없어야합니다. 사용자가 이름을 가지고 있는지 여부를 테스트하려면 나머지 코드에서 무엇을 할 것입니까? 매번 == 'Anonymous'을 확인 하시겠습니까?

템플릿은 실제로 데이터를 출력하는 데에만 관심을 가져야하지만 출력 문만으로 구성되어야하는 것은 아닙니다. 일반적으로 템플릿에는 if user is logged in, display "Logout", otherwise display "Register" and "Login" 사례가 있습니다. 이것들을 피하는 것은 거의 불가능합니다.

+0

현지화가 좋은 점은 생각하지 않았습니다. –

1

개인적으로 나는 깔끔한 코드를 좋아하고 템플릿에 주요 로직이 없어야한다는 것에 동의합니다. 따라서 구현시 모든 값에 "안전"기본값 (일반적으로 빈 문자열, 기본 클래스 또는 동급 포인터)이 있는지 확인합니다.이는 코드에 대한 두 가지 주요 개선점을 제공합니다. 먼저 null 값이나 누락 값을 지속적으로 테스트 할 필요가 없으며 디스플레이 템플릿에 너무 많은 로직없이 기본값을 출력 할 수 있습니다.

따라서 상황에 따라 기본 값에 대한 기본 포인터를 만드는 것이 최상의 솔루션이라고 할 수 있습니다.

0

세 번째 옵션 : 익명 사용자를 나타내는 일반 User 엔티티를 만듭니다.

데이터베이스 무결성을 이유로 None의 팬이 아닙니다.